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 数据类型体系

Python NumPy介绍