NumPy 使用

10/25/2023 NumPy

# NumPy 使用

# 介绍

数组对象:numpy.ndarray


# 参考资料

NumPy的应用-1 - Python-100-Days (opens new window)

np.savetxt()

np.argsort()
np.sort()

# 找到 2D 数组 arr 最小值的对应行、列索引 
i, j = np.unravel_index(np.argmin(arr, axis=None), arr.shape)

# 数值积分函数;通过梯形法则(trapezoidal rule)计算定积分
np.trapz()

# 数组创建

初始化 numpy 数组时,可以进行预分配

import numpy as np

# 从列表创建
np.array([1, 2, 3, 4, 5])

# 从内置函数创建
np.eye()             # 单位阵
np.zeros()           # 全为 0
np.ones()            # 全为 1
np.full()            # 填充
np.arange()          # 范围
np.linspace()        # 等差
np.logspace()        # 等比
np.fromstring()      # 从字符串提取数据

# 随机
np.random.rand()  # 0-1 随机小数
np.random.randint()  # 随机整数
np.random.normal()   # 正态分布随机数

# 属性

dtype    # 数组元素数据类型
shape    # 数组形状
ndim     # 数组维度
size     # 数组元素个数

# 索引

普通索引、切片索引、布尔索引

二维数组的普通索引

image.png

二维数组的切片索引

image.png


# 数学运算

*  # 数组乘法,元素相乘

np.square()  # 平方
np.sqrt()  # 平方根
np.cbrt()  # 立方根
np.log2()  # 对数计算

np.round()  # 保留小数位数

# 不使用科学计数法
np.set_printoptions(suppress=True)

通用一元函数:参数是一个数组对象,函数会对数组进行元素级的处理

函数 说明
abs / fabs 求绝对值的函数
sqrt 求平方根的函数,相当于 array ** 0.5
square 求平方的函数,相当于 array ** 2
exp 计算 $e^x$ 的函数
log / log10 / log2 对数函数(e 为底 / 10 为底 / 2 为底)
sign 符号函数(1 - 正数;0 - 零;-1 - 负数)
ceil / floor 上取整 / 下取整
isnan 返回布尔数组,NaN 对应 True,非 NaN 对应 False
isfinite / isinf 判断数值是否为无穷大的函数
cos / cosh / sin 三角函数
sinh / tan / tanh 三角函数
arccos / arccosh / arcsin 反三角函数
arcsinh / arctan / arctanh 反三角函数
rint / round 四舍五入函数

通用二元函数:参数是两个数组对象,函数会对两个数组中的对应元素进行运算

np.allclose(x, y)    # 检查数组 x 和 y 元素是否几乎相等
np.dot(x, y)         # 点积运算
np.inner(x, y)       # 内积运算
np.cross(x, y)       # 叉积运算
intersect1d(x, y)    # 交集

# 统计

axis 参数指定运算沿着哪一个轴来执行,不指定时为对整个数组

np.sum()     # 加和
np.mean()    # 算术平均值
np.min()     # 最小值
np.max()     # 最大值
np.std()     # 标准差
np.var()     # 方差

# 其他常用函数

函数调用:

  • 方式 1:Numpy 模块本身的函数(即 np.function()),如统计相关函数
  • 方式 2:通过数组对象本身的方法(即 array.method()),如数组创建函数,数学和线性代数操作等
np.copy()      # 拷贝

np.diff()

np.reshape()  # 改变数组形状
np.all()   # 判断数组是否所有元素都是 True
np.any()   # 判断数组是否有为 True 的元素

np.tolist()  # 转换成 Python list


np.flatten()   # 扁平化

np.unique()    # 去重
return_count=True  # 返回相同元素的数目

np.hstack()    # 横向堆叠多个数组构成新数组
np.vstack()    # 纵向堆叠多个数组构成新数组
np.append()    # 追加元素
np.insert()    # 插入元素
np.where()     # 条件查询
np.argwhere()  # 满足条件的元素索引

np.remainder() # 计算数组余数

np.isclose()   # 比较两个数值是否在某个容忍范围内接近相等
rtol           # 相对容忍值
atol           # 绝对容忍值

# IO

查看 numpy npy npz 格式文件 VSCode 插件:vscode-numpy-viewer (opens new window)

np.save("*.npy")
np.savez("*.npz")

np.dump()  # 保存数组到二进制文件中
np.tofile()  # 将数组写入文件中

np.load()
np.loadtxt()

data.files
# npz 格式文件导入并读取数据默认形式
data["arr_0"]

# 线性代数

linalg 模块

.T  # 转置
np.transpose()

@  # 矩阵乘法
np.matmul()
np.dot()  # 矩阵 1D,点积;2D,矩阵相乘

np.triu(..., k=...)      # 提取上三角矩阵;k 为偏移量
arr.trace()              # 对角线元素和
np.linalg.trace()        # 对角线元素和
np.linalg.matrix_rank()  # 矩阵的秩 
np.linalg.inv()          # 求逆
np.linalg.det()          # 求行列式
np.linalg.eig()          # 计算特征值、特征向量
np.linalg.qr()           # QR 分解
np.linalg.svd()          # 奇异值分解
np.linalg.solve()        # 解线性方程组
np.linalg.norm(x, ord="fro")  # 范数 ord="fro" F-范数

# 多项式

# 方式 1
p = np.poly1d((2, 3, 1))

# 方式 2
from numpy.polynomial import Polynomial

p = Polynomial((2, 3, 1))


coeffs  # 获取多项式系数
coefficients

roots  # 获取多项式的根

deriv()  # 求导
integ()  # 不定积分

polyfit()  # 拟合
Last Updated: 7/13/2024, 7:09:02 AM