Python实战派:NumPy(下)
本篇文章作为介绍NumPy库的最后一章,其内容包含常用的NumPy函数以及关于ufuns的广播机制。跟本系列的其他文章一样,本篇文章也是对函数的参数进行讲解,提供代码示例。代表接收的数据,数组或字符串;字符串使用","或空格分隔列,使用";传入的data如果是数组,表示根据数组创建对应的副本,默认为True创建副本。字符串使用","或空格分隔列,使用";PS:在分隔不等量的数组时,分隔后的第一个数组占多数,其他按比例分隔。代表分隔方向,默认为1横向,0代表纵向。代表分隔方向,默认为1横向,0代表纵向。
目录
前言
本篇文章作为介绍NumPy库的最后一章,其内容包含常用的NumPy函数以及关于ufuns的广播机制。跟本系列的其他文章一样,本篇文章也是对函数的参数进行讲解,提供代码示例
concatenate函数
concatenate函数用于实现多个数组的纵向和横向合并
concatenate((tup),axis = 0,out = None)| 备注 | 参数 |
| tup | 代表要合并的数组序列 |
| axis | 代表沿哪一个方向组合,默认为0,代表横轴 |
| out | 代表输出格式,默认为None |
表1.concatenate函数参数表
a = np.array(((0,1),(2,3)))#array([[0, 1], [2, 3]])b = np.array(((4,5),(6,7)))#array([[4, 5], [6, 7]])np.concatenate((a,b)) #横向合并#array([[0, 1], [2, 3], [4, 5], [6, 7]])np.concatenate((a,b),axis = 1) #纵向合并#array([[0, 1, 4, 5], [2, 3, 6, 7]])hsplit函数
hsplit函数用于横向分隔数组为两个数组
hsplit(ary,indices_or_sections)| 备注 | 参数 |
| ary | 代表要分隔的数组 |
| indices_or_sections | 代表分隔的份数或位置 |
表2.hsplit函数参数表
ary = np.random.randint(1,10,size = (4,2))#array([[3, 5],# [7, 8],# [5, 8],# [5, 5]])np.haplit(ary,2)#[array([[3],# [7],# [5],# [5]]),# array([[5],# [8],# [8],# [5]])]vsplit函数
vsplit函数用于纵向分隔数组为两个数组
vsplit(ary,indices_or_sections)| 备注 | 参数 |
| ary | 代表要分隔的数组 |
| indices_or_sections | 代表分隔的份数或位置 |
表3.vsplit函数参数表
ary = np.random.randint(1,10,size = (4,2))#array([[3, 5],# [7, 8],# [5, 8],# [5, 5]])np.vsplit(ary,2)#[array([[3, 5],# [7, 8]]),# array([[5, 8],# [5, 5]])]split函数
split函数用于分隔数组为两个数组
split(ary,indices_or_sections,axis=0)| 备注 | 参数 |
| ary | 代表要分隔的数组 |
| indices_or_sections | 代表分隔的份数或位置 |
| axis | 代表分隔方向,默认为1横向,0代表纵向 |
表4.split函数参数表
ary = np.random.randint(1,10,size = (4,2))#array([[3, 5],# [7, 8],# [5, 8],# [5, 5]])np.split(ary,2,axis = 0)#[array([[3, 5],# [7, 8]]),# array([[5, 8],# [5, 5]])]np.split(ary,2,axis = 1)#[array([[3],# [7],# [5],# [5]]),# array([[5],# [8],# [8],# [5]])]array_split函数
array_split函数用于分隔不等量的数组为两个数组
array_split(ary,indices_or_sections,axis=0)| 备注 | 参数 |
| ary | 代表要分隔的数组 |
| indices_or_sections | 代表分隔的份数或位置 |
| axis | 代表分隔方向,默认为1横向,0代表纵向 |
表5.array_split函数参数表
PS:在分隔不等量的数组时,分隔后的第一个数组占多数,其他按比例分隔
ary = np.random.randint(1,10,size = (3,3))#array([[8, 2, 6],# [5, 9, 5],# [4, 1, 1]])np.array_split(value,2,axis = 1)#[array([[8, 2],# [5, 9],# [4, 1]]),#第一个数组占大部分# array([[6],# [5],# [1]])]#np.array_split(value,2,axis = 0)#[array([[8, 2, 6],# [5, 9, 5]]),#第一个数组占大部分# array([[4, 1, 1]])]matrix函数
matrix函数用于创建矩阵,默认为传入的数据创建副本
matrix(data,dtype=None,copy=True)| 备注 | 参数 |
| data | 代表接收的数据,数组或字符串;字符串使用","或空格分隔列,使用";"分隔行 |
| dtype | 用来指定矩阵元素的数据类型,默认为None |
| copy | 传入的data如果是数组,表示根据数组创建对应的副本,默认为True创建副本 |
表6.array_split函数参数表
np.matrix("1,2,3")#matrix([[1, 2, 3]])np.matrix("1;2;3")#matrix([[1],# [2],# [3]])np.matrix("1 2 3")#matrix([[1, 2, 3]])np.matrix("1,2,3;4 5 6")#matrix([[1, 2, 3],# [4, 5, 6]])mat函数
mat函数用于创建矩阵,跟matrix函数区别在于不创建副本
mat(data,dtype=None)| 备注 | 参数 |
| data | 代表接收的数据,数组或字符串;字符串使用","或空格分隔列,使用";"分隔行 |
表7.mat函数参数表
bmat函数
bmat函数用于将小矩阵组合成大矩阵
bmat(obj,ldict=None,qdict=None)| 备注 | 参数 |
| obj | 用于接收数据,数据为字符串或数组 |
| ldict | 字典,可选。用于替换当前帧中的本地操作数 |
| gdict | 字典,可选。用于替换当前帧中的全局操作数 |
表8.bmat函数参数表
arr1 = np.ones((1,2)) #创建尺寸为1x2的,元素全为1的数组arr2 = np.zeros((1,2)) #创建尺寸为1x2的,元素全为0的数组np.bmat("arr1;arr2") #传入的obj必须尺寸相对应#matrix([[1., 1.],# [0., 0.]])multiply函数
multiply函数用于求传入的矩阵的对应元素乘积
multiply(data)| 备注 | 参数 |
| data | 用于接收数据 |
表9.multiply函数参数表
arr1 = np.ones((1,2)) #创建尺寸为1x2的,元素全为1的数组arr2 = np.zeros((1,2)) #创建尺寸为1x2的,元素全为0的数组np.multiply(arr1,arr2)#array([[0., 0.]])矩阵属性
| 属性 | 说明 |
| T | 返回自身的转置 |
| H | 返回自身的共轭转置 |
| I | 返回自身的逆矩阵 |
| A | 返回自身数据的二维数组的一个视图 |
表10.矩阵属性
代码示例:
value = np.random.randint(1,10,size = (4,3))arr = np.matrix(value)#matrix([[1, 7, 3],# [5, 1, 3],# [8, 8, 6],# [7, 5, 6]])arr.I #返回自身的逆矩阵#matrix([[-0.22 , 0.06 , 0.36 , -0.28 ],# [ 0.04666667, -0.07333333, 0.22666667, -0.21333333],# [ 0.24444444, 0.04444444, -0.62222222, 0.64444444]])arr.T #返回自身的转置#matrix([[1, 5, 8, 7],# [7, 1, 8, 5],# [3, 3, 6, 6]])arr.H #返回自身的共轭转置#matrix([[1, 5, 8, 7],# [7, 1, 8, 5],# [3, 3, 6, 6]])arr.A #返回自身数据的二维数组的视图#array([[1, 7, 3],# [5, 1, 3],# [8, 8, 6],# [7, 5, 6]])ufunc函数的运算
m = np.array([1,2,3])n = np.array([4,5,6])print("相加:",m+n)print("相减:",m-n)print("相乘:",m*n)print("相除:",m/n)print("幂运算:",m**n)#相加: [5 7 9]#相减: [-3 -3 -3]#相乘: [ 4 10 18]#相除: [0.25 0.4 0.5 ]#幂运算: [ 1 32 729]ufuns函数的广播机制
广播机制是指当不同形状的数组之间执行算术运算时,会通过扩充尺寸较小的数组来与尺寸较大的数组相匹配,后再进行运算