Python实战派:NumPy(下)

本篇文章作为介绍NumPy库的最后一章,其内容包含常用的NumPy函数以及关于ufuns的广播机制。跟本系列的其他文章一样,本篇文章也是对函数的参数进行讲解,提供代码示例。代表接收的数据,数组或字符串;字符串使用","或空格分隔列,使用";传入的data如果是数组,表示根据数组创建对应的副本,默认为True创建副本。字符串使用","或空格分隔列,使用";PS:在分隔不等量的数组时,分隔后的第一个数组占多数,其他按比例分隔。代表分隔方向,默认为1横向,0代表纵向。代表分隔方向,默认为1横向,0代表纵向。

作者
WildPointer
发布
2024.06.12
专栏
Python实战派
阅读
约 7 分钟 / 1,271 次原文浏览

目录


前言

本篇文章作为介绍NumPy库的最后一章,其内容包含常用的NumPy函数以及关于ufuns的广播机制。跟本系列的其他文章一样,本篇文章也是对函数的参数进行讲解,提供代码示例


concatenate函数

concatenate函数用于实现多个数组的纵向和横向合并

python
concatenate((tup),axis = 0,out  = None)
备注参数
tup代表要合并的数组序列
axis代表沿哪一个方向组合,默认为0,代表横轴
out代表输出格式,默认为None

表1.concatenate函数参数表

python
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函数用于横向分隔数组为两个数组

python
hsplit(ary,indices_or_sections)
备注参数
ary代表要分隔的数组
indices_or_sections代表分隔的份数或位置

表2.hsplit函数参数表

python
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函数用于纵向分隔数组为两个数组

python
vsplit(ary,indices_or_sections)
备注参数
ary代表要分隔的数组
indices_or_sections代表分隔的份数或位置

表3.vsplit函数参数表

python
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函数用于分隔数组为两个数组

python
split(ary,indices_or_sections,axis=0)
备注参数
ary代表要分隔的数组
indices_or_sections代表分隔的份数或位置
axis代表分隔方向,默认为1横向,0代表纵向

表4.split函数参数表

python
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函数用于分隔不等量的数组为两个数组

python
array_split(ary,indices_or_sections,axis=0)
备注参数
ary代表要分隔的数组
indices_or_sections代表分隔的份数或位置
axis代表分隔方向,默认为1横向,0代表纵向

表5.array_split函数参数表

PS:在分隔不等量的数组时,分隔后的第一个数组占多数,其他按比例分隔

python
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函数用于创建矩阵,默认为传入的数据创建副本

python
matrix(data,dtype=None,copy=True)
备注参数
data代表接收的数据,数组或字符串;字符串使用","或空格分隔列,使用";"分隔行
dtype用来指定矩阵元素的数据类型,默认为None
copy传入的data如果是数组,表示根据数组创建对应的副本,默认为True创建副本

表6.array_split函数参数表

python
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函数区别在于不创建副本

python
mat(data,dtype=None)
备注参数
data代表接收的数据,数组或字符串;字符串使用","或空格分隔列,使用";"分隔行

表7.mat函数参数表


bmat函数

bmat函数用于将小矩阵组合成大矩阵

python
bmat(obj,ldict=None,qdict=None)
备注参数
obj用于接收数据,数据为字符串或数组
ldict字典,可选。用于替换当前帧中的本地操作数
gdict字典,可选。用于替换当前帧中的全局操作数

表8.bmat函数参数表

python
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函数用于求传入的矩阵的对应元素乘积

python
multiply(data)
备注参数
data用于接收数据

表9.multiply函数参数表

python
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.矩阵属性

代码示例:

python
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函数的运算

python
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函数的广播机制

广播机制是指当不同形状的数组之间执行算术运算时,会通过扩充尺寸较小的数组来与尺寸较大的数组相匹配,后再进行运算

20次原文点赞;这里的喜欢仅保存在本机
WildPointer

专注系统编程、工程实践与底层技术,记录 C++、Qt、OpenCV 与 VTK 的学习和实践。