Python实战派:NumPy(中)

本文主要介绍了NumPy库中常用的矩阵处理函数。内容包括:创建全1数组的ones函数、生成对角矩阵的diag函数;随机数生成函数;矩阵维度操作函数;以及矩阵合并函数。文章详细说明了各函数的参数和使用方法,并提供了具体的代码示例,帮助读者掌握NumPy库在矩阵操作中的实用技巧。

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

前言

        本文章是续《Python:处理矩阵之NumPy库(上)》的第二篇文章,也是NumPy库系列的第二篇文章。在前者对NumPy库介绍的基础上,本篇文章将继续对NumPy库的操作进行讲解


onse函数

        onse函数用于创建元素全为1的数组

python
onse(shape,dytpe = None,order  = 'C')
参数备注
shape代表数组尺寸,可以是数值或元组
dtype代表数组中的元素的数据类型,默认为None
order代表存储多维数组时,是列优先'F'还是行优先'C',默认为行优先

表1.onse函数参数表

python
_numpy.ones((2,2))#array([[1., 1.],       [1., 1.]])_numpy.ones((2,2),dtype = int)#array([[1, 1],       [1, 1]])

PS:函数onse有着zeros函数一样的特点,可参考zeros函数的总结,主要原因是由于shape代表的是数组尺寸


diag函数

diag函数用于生成对角线为列表V的数组

python
diag(V,K=0)
参数备注
V代表一个一维数组时,结果形成一个以一维数组为对角线元素的二维数组;是一个二维数组时,结果为数组的对角线元素
K默认为0,可选参数。决定列表处于对角线的位置,大于零位于对角线上面,小于零则在下面

表2.diag函数参数表

python
_numpy.diag(([1,2,3]))#array([[1, 0, 0],       [0, 2, 0],       [0, 0, 3]])_numpy.diag(([1,2,3]),k=1)#array([[0, 1, 0, 0],       [0, 0, 2, 0],       [0, 0, 0, 3],       [0, 0, 0, 0]])_numpy.diag(([1,2,3]),k=-1)#array([[0, 0, 0, 0],       [1, 0, 0, 0],       [0, 2, 0, 0],       [0, 0, 3, 0]])

random函数

random函数用于创建元素为size的随机数组

python
random.random(size = None)
参数备注
size代表数组尺寸,可以是整数或者整数的元组

表3.random函数参数表

python
_numpy.random.random(2)    #生成一行的数组,元素为两个#array([0.33970551, 0.03921899])_numpy.random.random((1,2))#生成一行二列的二维数组#array([[0.06720547, 0.67036122]])

rand函数

        rand函数用于生成服从均匀分布的随机数组

python
random.rand(value)
参数备注
value代表数组维数,可选。默认生成一个数值,而不是数组

表4.rand函数参数表

python
_numpy.random.rand()    #生成一个数#0.9012041794305755_numpy.random.rand(2)   #生成一行的数组,元素为两个#array([0.88723514, 0.16626263])_numpy.random.rand(1,2) #生成一行二列的二维数组#array([[0.7982949 , 0.94322369]])

randn函数

randn函数用于生成服从正态分布的随机数组

python
random.randn(value)
参数备注
value代表数组维数,可选。默认生成一个数值,而不是数组

表5.randn函数参数表

python
_numpy.random.randn()    #生成一个数#-0.04984522010821525_numpy.random.randn(2)   #生成一行的数组,元素为两个#array([-0.15864059, -1.49100105])_numpy.random.randn(1,2) #生成一行二列的二维数组#array([[-0.09911854, -2.14864424]])

randint函数

randint函数用于生成指定范围的整型随机数

python
random.randint(low,high = None,size = None,dtype = '1')
参数备注
low最小值
high最大值,在含有尺寸参数时可以省略。省略后默认为生成0到最小值随机数组
size数组的尺寸
dtype输出数组的格式

表6.randint函数参数表

python
#随机生成在0到5(不包含5)的区间内的一个整数np.random.randint(0,high = 5)#4#随机生成一个元素在0到3(不包含3)的区间内的整数,且数组尺寸为10np.random.randint(3,size = 10)#array([0, 0, 1, 0, 0, 2, 0, 2, 0, 1])#随机生成一个元素在0到5(不包含5)的区间内的整数,且数组尺寸为一行二列np.random.randint(0,high = 5,size = (1,2))#array([[1, 4]])

shape函数

shape函数用于读取矩阵的维度或修改数组尺寸

python
shape(value)
参数备注
value要读取的矩阵

表7.shape函数参数表

python
value_A = np.array([1,2,3])_numpy.shape(value_A)    #一维数组只显示列数#(3,)value_B = np.array([[1,2,3]])_numpy.shape(value_B)    #二维数组显示行数和列数#(1, 3)value_C = np.array([[[1,2,3]]])_numpy.shape(value_C)    #二维数组显示轴,行数和列数#(1, 1, 3)value_D = _numpy.array(((1,2,3),(4,5,6)))    #两行三列数组#array([[1, 2, 3],       [4, 5, 6]])value_D.shape = (3,2)    #修改为三行两列数组#array([[1, 2],       [3, 4],       [5, 6]])

PS:使用shape函数输出维度,一维数组只输出列数,二维数组输出行数和列数,以此类推


reshape函数

        reshape函数用于修改数值形状

python
reshape(shape,ordef='C')
参数备注
shape代表修改后的新数组尺寸
order代表存储多维数组时,是行优先('C')还是列优先('F')。默认为'C',列优先就会把列元素优先进行排序

表8.reshape函数参数表

python
a = np.array(((0,1),(2,3)))#array([[0, 1],       [2, 3]])a.reshape((4,1))    #行优先#array([[0],       [1],       [2],       [3]])a.reshape((4,1),order = 'F')    #列优先#array([[0],       [2],       [1],       [3]])

resize函数

resize函数用于修改尺寸,将多余的位置置零

python
resize(new_shape,refxheck = True)
参数备注
new_shape代表修改后数组的新尺寸
refcheck代表是否做引用计数检查,如果为False,则不会检查引用计数。默认值为True

表9.resize函数参数表

python
a = np.array(((0,1),(2,3)))#array([[0, 1],       [2, 3]])a.resize((4,1))    #行与列符合个数#array([[0],       [1],       [2],       [3]])a.resize((4,2),refcheck = False)#array([[0, 1],       [2, 3],       [0, 0],       [0, 0]])#行与列不符合个数,refcheck置为False可为空余部分置0

PS:reshape与resize的区别在于,reshape不会因为数组元素不符合尺寸,而补充元素。resize将其参数refxheck置False时,会补充空余的位置,将位置置0


flatten函数

flatten函数用于完成数组展平工作

python
flatten(order = 'C')
参数备注
order代表展平方式,沿横轴还是纵轴,默认为'C'横轴展平,'F'为沿纵轴展平

表10.flatten函数参数表

python
a = np.array(((0,1),(2,3)))#array([[0, 1],       [2, 3]])a.flatten()    #横轴展平#array([0, 1, 2, 3, 0, 0, 0, 0])a.flatten(order = 'F')    #纵轴展平#array([0, 2, 0, 0, 1, 3, 0, 0])

hstack函数

hstack函数用于对数组进行横向合并

python
hstack(tup)
参数备注
tup代表要合并的数组序列

表11.hstack函数参数表

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.hstack((a,b))    #横向合并#array([[0, 1, 4, 5],       [2, 3, 6, 7]])

vstack函数

vstack函数用于对数组进行纵向合并

python
vstack(tup)
参数备注
tup代表要合并的数组序列

表12.vstack函数参数表

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.vstack((a,b))    #纵向合并#array([[0, 1],       [2, 3],       [4, 5],       [6, 7]])
6次原文点赞;这里的喜欢仅保存在本机
WildPointer

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