Numpy

NumPy基础之数组常用函数(二)

2018-09-18  本文已影响14人  5f2a6061653d

集合函数

NumPy提供了一些针对一维数组的基本集合运算方法,具体如下表所示。

方法名 说明
unique(a) 计算a中的唯一元素,并返回有序结果
intersect1d(a,b) 计算a和b中的公共元素,并返回有序结果
union1d(a,b) 计算a和b的并集,并返回有序结果
in1d(a,b) 得到一个表示“a的元素是否包含于b”的布尔型数组
setdiff1d(a,b) 集合的差,即元素在a中且不在b中
setxor1d(a,b) 集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素

上表是数组的集合运算方法,其中以unique()函数运用比较频繁。接下来以unique()函数为例讲解数组的集合运算方法的用法,具体示例如下所示:

In [1]: import numpy as np
In [2]: arr = np.random.randint(10,size = 20)
In [3]: ua = np.unique(arr)

上述代码是unique()函数的使用,其中In [2]是创建了一个4行5列的随机数组,并将其赋值给变量arr;In [3]是使用unique()函数,并将unique()函数的返回结果赋值给变量ua。各变量的运行结果如下所示:

In [5]: arr
Out[5]: array([7, 0, 4, 1, 0, 0, 0, 2, 7, 1, 6, 5, 7, 0, 9, 0, 2, 4, 6, 7])
In [6]: ua
Out[6]: array([0, 1, 2, 4, 5, 6, 7, 9])

线性代数函数

线性代数运算包括矩阵乘法、矩阵分解、行列式以及其他方阵数学等,是任何数组库的重要组成部分,函数一般包含在numpy.linalg中,常见的numpy.linalg函数如下表所示。

函数名 说明
diag 以一维数组的形式返回方阵的对角线(或非主对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
dot 矩阵乘法(矩阵相乘)
trace 计算对角线元素的和
det 计算矩阵行列式
eig 计算方阵的本征值和本征向量
inv 计算方阵的逆
pinv 计算矩阵的Moore-Penrose伪逆
qr 计算QR分解
svd 计算奇异值分解
solve 解线性方程组Ax=b,其中A为一个方阵
lstsq 计算Ax=b的最小二乘解

上表是常见的numpy.linalg函数,接下来以dot()函数为例讲解numpy.linalg函数的用法,具体示例如下所示:

In [1]: import numpy as np
In [2]: arr1 = np.random.randint(10,size = 20).reshape(4,5)
In [3]: arr2 = np.random.randint(10,size = 20).reshape(5,4)
In [4]: marr = arr1.dot(arr2)
In [5]: marray = np.dot(arr1,arr2)

上述代码是dot()函数的使用,其中In [2]是创建一个4行5列的随机数组,并将其赋值给变量arr1;In [3] 是创建一个5行4列的随机数组,并将其赋值给变量arr2;In [4]是使用dot()函数,并将dot()函数的返回结果赋值给变量marr;In [5]是dot()函数的另一种使用方式,与In [4]效果相同,并将返回结果赋值给变量marray。各变量的运行结果如下所示:

In [6]: arr1
Out[6]:
array([[6, 4, 6, 7, 2],
 [0, 4, 5, 6, 7],
 [3, 4, 4, 7, 0],
 [2, 2, 2, 6, 3]])
In [7]: arr2
Out[7]:
array([[9, 8, 1, 8],
 [0, 7, 7, 7],
 [4, 4, 1, 5],
 [2, 7, 0, 1],
 [5, 2, 8, 5]])
In [8]: marr
Out[8]:
array([[102, 153, 56, 123],
 [ 67, 104, 89, 94],
 [ 57, 117, 35, 79],
 [ 53, 86, 42, 61]])
In [9]: marray
Out[9]:
array([[102, 153, 56, 123],
 [ 67, 104, 89, 94],
 [ 57, 117, 35, 79],
 [ 53, 86, 42, 61]])

从上述运行结果可以看出,dot()函数的两种使用方式所得的结果相同,dot()函数实现两可相乘矩阵的相乘运算。

随机数函数

在numpy.random模块中,含有很多随机数函数,并对Python内置的random模块作了进一步的补充,其中部分函数如下表所示。

函数名 说明
seed 确定随机数生成器的种子
permutation 返回一个序列的随机排列或返回一个随机排列的范围
shuffle 对一个序列就地随机排列
rand 产生均匀分布的样本值
randint 从给定的上下限范围内随机选取整数
randn 产生正态分布(平均值为0,标准差为1)的样本值,类似与MATLAB接口
binomial 产生二项分布的样本值
normal 产生正态(高斯)分布的样本值
beta 产生Beta分布的样本值
chisquare 产生卡方分布的样本值
gamma 产生Gamma分布的样本值
unifor 产生在[0,1)中均匀分布的样本值

在本节数组的创建讲解时就已涉及到随机数函数randn()和randint()的讲解,因此不再举例讲解随机数函数的使用。

数组文件读写函数

NumPy可将数组数据进行保存及读取文本文件或二进制文件。磁盘数组数据读写的两个主要函数分别是numpy.save()函数和numpy.load()函数,具体使用示例如下所示:

In [23]: import numpy as np
In [24]: arr = np.random.randint(10,size = 20).reshape(4,5)
In [25]: np.save('array',arr)
In [26]: array = np.load('array.npy')

上述代码是数组数据读写函数的使用,其中In [24]是创建一个4行5列的随机数组,并将其赋值给变量arr;In [25]是使用save()函数,将数组arr保存到文件名为array.npy的文件中(文件路径末尾未添加扩展名.npy时,系统会自动添加);In [26]是使用load()函数加载数组数据,并将返回的数据赋值给变量array。各变量的运行结果如下所示:

In [27]: arr
Out[27]:
array([[7, 8, 1, 6, 6],
 [9, 8, 8, 7, 9],
 [1, 7, 9, 1, 3],
 [8, 4, 0, 1, 0]])
In [28]: array
Out[28]:
array([[7, 8, 1, 6, 6],
 [9, 8, 8, 7, 9],
 [1, 7, 9, 1, 3],
 [8, 4, 0, 1, 0]])

从上述运行结果可以看出,数据文件读取成功,加载之后的数组数据与保存的数组数据相同。

上一篇下一篇

猜你喜欢

热点阅读