Python NumPy介绍
NumPy 基础
NumPy 主要就是通过引入 ndarray 实现了一种高效的数据存取和处理,配套了基础的数据处理函数和广播能力,并具有多种元素索引能力(包括逻辑索引)。其基本功能与 matlab 的数据结构基本一致,主要区别是 matlab 对于元素的操作通过加 ‘.’ 实现,而 NumPy 自动对元素进行操作,对应矩阵乘法则需要使用额外的函数实现。
- import numpy as np (导入 numpy 库)
- data = np.array([6, 7.5, 8, 0, 1]) (生成 ndarray)
- type(data) (数据整体的类型)
- data.shape (数据每一维的长度)
- data.dtype (内部数据的类型)
- data.ndim (数据的维数)
- data * 10 (自动广播,对每个元素进行操作)
- np.zeros(5) (全 0 的 1 * 5 的 ndarray)
- np.zeros((3,4)) (全 0 的 3 * 4 的 ndarray)
- np.ones((3,4))(全 1 的 3 * 4 的 ndarray)
- np.empty((4,4))(任意值的 3 * 4 的 ndarray)
- np.eye(4)(4 * 4的对角 ndarray)
- np.arange(15)(从 0 到 14 的 ndarray)
- data = np.array(['1.24','-2.7','3.'], dtype=np.float32) (通过指定 dtype 将元素自动进行转换)
- data = np.array(['1.24','-2.7','3.'], dtype=np.string_)(声明元素类型为 String)
- data.astype(np.float32)(将元素类型强制转换为 float)
- data * data (数据的每个元素分别做乘法)
- 1 / data (广播到每一个元素)
- data[3:6] (取位置 3 -5 的元素,修改即修改原始数组)
- temp_copy = data[3:7].copy() (取位置 3-6 的元素,并复制得到新的数组)
- data = np.array([[1,2,3],[2,3,4],[3,4,5]]) (生成二维数组)
- data[1] (取二维数组位置为 1 的行)
- data[1,2](取二维数组位置为 1,2 的元素)
- data[1][2](取二维数组位置为 1,2 的元素)
- data[:2](取二维数组位置为 2 的列)
- data[:2, 1:] (取二维数组行 小于 2,列大于等于 1 的子数组)
- data == 1 (得到元素是否等于 1 的逻辑数组)
- data[data == 1](取元素等于 1 的对应元素)
- data[data != 1](取元素不等于 1 的对应元素)
- data[(data == 1) | (data == 2)](取元素等于 1 或 等于 2 的对应元素)
- data[data < 3] = 0(将元素小于 3 的元素置 0)
- data[[2,0,1,1]](按行 2 0 1 1 的对应数组)
- data[[2,0,1,1],[1,2,1,0]](取位置 [2,1] [0,2] [1,1] [1,0] 的元素)
- data[[2,0,1,1]][:,1,2,1,0]](按行 2 0 1 1 和列 1 2 1 0 取出对应数组)
- data = np.arange(15).reshape((3,5)) (将数组整形为 3 * 5)
- data.T (将数组转置)
- data = np.random.randn(6,3) (生成服从正态分布的 6 * 3 的数组)
- np.dot(data.T, data) (实现矩阵乘法)
- data = np.arange(16).reshape((2,2,4)) (将数组整形为 2 * 2 * 4 的三维数组)
- data.transpose((1,0,2)) (将 0 和 1 轴交换)
- data.swapaxes(1,2)(将 1 和 2 轴交换)
通用函数
- abs, fabs (计算绝对值,fabs 为非复数的更快版本)
- sqrt (开方)
- square (平方)
- exp (指数)
- log, log10, log2, log1p (对数, log1p 为 log(1+x))
- sign (取元素符号)
- ceil (向上取整,保持原有的数据类型)
- floor(向下取整,保持原有的数据类型)
- rint (四舍五入,保留 dtype)
- modf (以小数和整数部分独立返回)
- isnan (判断是否为NaN)
- isfinite, isinf (判断是否有限和无穷)
- cos, cosh, sin, sinh, tan, tanh
- arccos, arccosh, arcsin, arcsinh, arctan, arctanh
- logical_not
- add (+)
- subtract (-)
- multiply (*)
- divide, floor_divide (/, //)
- power
- maximum, fmax (元素级最大值计算,)
- minimum, fmin
- mod(取模)
- copysign(将第二个数组值的符号复制给第一个数组)
- greater, greater_equal
- less, less_equal
- equal, not_equal
- logical_and, logical_or, logical_xor
利用数组进行数组处理
- where (根据第一个参数的 T or F,来确定是选第二个参数,还是第三个)
- sum
- mean
- std, var
- min, max
- argmin, argmax
- cumsum (所有元素的累积和)
- cumprod (所有元素的累积积)
- any
- all
- sort
- unique
- intersect1d (交集)
- union1d (并集)
- in1d (第一个数组中的元素是否包含在第二数组中)
- setdiff1d (集合之差)
- setxor1d (存在在某一个数组,但不同时存在于两个数组中)
数组文件的输入输出
- save(path, values):以 npy 结尾
- load(path)
- savez(path, key1=values, key2=values):读取时通过 data[key] 读取相应的数据
- savetxt
- loadtxt:np.loadtxt('array.txt', delimiter=',')
线性代数
- import numpy.linalg
- diag:对角矩阵和向量的转换
- dot:矩阵乘法
- trace:对角元素的和
- det:矩阵行列式
- eig:方阵的特征值和特征向量
- inv:方阵的逆
- pinv:矩阵的广义逆
- qr:QR分解
- svd:奇异值分解
- solve:Ax = b 线性方程求解,A 为方阵
- lstsq:计算 Ax = b 的最小二乘解
随机数生成
- import numpy.random
- seed
- permutation:返回一个序列的随机排列
- shuffle:就是随机排列
- rand:均匀分布
- randint:给定范围内随机选择整数
- randn:(0,1)正态分布
- binormal:二项分布
- normal:正态分布
- beta:Beta分布
- chisquare:卡方分布
- gamma:Gamma分布
- uniform:(0,1)均匀分布
NumPy 高级应用
NumPy 数据类型体系