NumPy基础之数组常用函数(二)
集合函数
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]])
从上述运行结果可以看出,数据文件读取成功,加载之后的数组数据与保存的数组数据相同。