数组的方法
数组转置和轴对换
转置(transpose,或者通过T属性)返回的是源数据视图(不会进行任何复制操作)。ndarray还有一个swapaxes方法,它需要接受一对轴编号。
数组索引
- 数组切片索引:数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到原数组上。如果要得到ndarray切片的一份副本而非视图,就需要显式地进行复制操作,例如:
arr[5:8].copy
- 布尔型索引:通过布尔型索引选取得到的数组中的数据,将总是创建数据的副本,即使返回一模一样的数组也是如此。
- 花式索引:只需传入一个用于指定顺序的整数列表或者ndarray即可,它总是将数据复制到新数组中。如
arr[[4, 3, 0, 6]]
。一次传入多个索引数据时,它返回的是一个一维数组,其中元素对应各个索引元素。选取一个矩形行列子集的方法可以为:arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
,或者使用np.ix_
函数,它可以将两个一维整数数组转换为一个用于选取正方形区域的索引器。arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]
。
数组的集合运算
- np.unique(x):计算x中的唯一元素,并返回有序结果
- np.intersect1d(x,y):计算x和y中的公共元素,并返回有序结果
- np.union1d(x,y):计算x和y的并集,并返回有序结果
- np.in1d(x,y):用于测试一个数组中的值在另一个数组中的成员资格,得到一个表示“x的元素是否包含于y”的布尔型数组
In [1]: import numpy as np
In [2]: val = np.array([5,2,4,6,7,8,4,3])
In [3]: np.in1d(val, [1,2,4,5])
Out[3]: array([ True, True, True, False, False, False, True, False], dtype=bool)
- np.setdiff1d(x,y):集合的差,即元素在x中且不在y中
- np.setxor1d(x,y):集合的对称差,即存在于一个数组中,但不同时存在于两个数组中的元素
数组的文件输入输出
二进制格式
- np.save(fname, X)
- np.load(fname)
- np.savez(fname,a,b,...)
- savez_compressed
文本文件格式
- np.loatxt(filename, dtype, delimiter=' ', skiprows, usecols=(0,1,...), comments, converters={0:func0, 1:func1,...})
- np.genfromtxt(...)
- np.fromfile(...)
- np.savetxt(filename,data,fmt="%d",delimiter)
- np.tofile(...)
线性代数
常用的numpy.linalg函数
- diag:以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换成方阵(非对角线元素为0)
- dot:矩阵乘法
- trace:计算对角线元素的和
- det:计算矩阵行列式
- eig:计算方阵的本征值和本征向量
- inv:计算方阵的逆
- pinv:计算矩阵的Moore-Penrose伪逆
- qr:计算QR分解
- svd:计算奇异值分解(SVD)
- solve:解线性方程组Ax = b, 其中A为一个方阵
- lstsq:计算Ax = b 的最小二乘解
随机数生成
部分numpy.random函数
- seed:确定随机数生成器的种子
- permutation:返回一个序列的随机排列或返回一个随机排列的范围
- shuffle:对一个序列就地随机排序
- rand:产生一个均匀分布的样本值
- randint:从给定的上下限范围内随机选取整数
- randn:产生正态分布(平均值0,标准差为1)的样本值,类似于Matlab接口
- binomial:产生二项分布的样本值
- normal:产生正态(高斯)分布的样本值
- beta:产生Beta分布的样本值
- chisquare:产生卡方分布的样本值
- gamma:产生Gamma分布的样本值
- uniform:产生在[0, 1]中均匀分布的样本值