目录
1.前言
3.hsplit函数
4.vsplit函数
5.split函数
7.matrix函数
8.mat函数
9.bmat函数
10.multiply函数
11.矩阵属性
12.ufunc函数的运算
13.ufuns函数的广播机制
前言
本篇文章作为介绍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函数的广播机制
广播机制是指当不同形状的数组之间执行算术运算时,会通过扩充尺寸较小的数组来与尺寸较大的数组相匹配,后再进行运算