numpy的详细知识点,简单易懂
numpy的核心概念
NumPy(Numerical Python)是Python中用于科学计算的基础库,提供高效的多维数组对象ndarray
及大量数学函数。其核心设计围绕数组操作、广播机制和向量化计算展开。
数组创建与属性
- 基本创建:
import numpy as np arr = np.array([1, 2, 3]) # 一维数组 arr_2d = np.array([[1, 2], [3, 4]]) # 二维数组
- 特殊数组:
np.zeros((2, 3)) # 全0数组 np.ones((2, 2)) # 全1数组 np.arange(0, 10, 2) # 类似range的序列 np.linspace(0, 1, 5) # 等间隔数组
- 数组属性:
shape
(维度)、dtype
(数据类型)、size
(元素总数)、ndim
(轴数)。
数组操作
- 索引与切片:
arr = np.array([[1, 2, 3], [4, 5, 6]]) arr[1, 2] # 输出6(第二行第三列) arr[:, 1:3] # 所有行的第2到3列
- 变形与合并:
arr.reshape(3, 2) # 改变形状 np.concatenate([arr1, arr2], axis=0) # 沿行合并 np.vstack((arr1, arr2)) # 垂直堆叠
广播机制
NumPy允许不同形状的数组进行算术运算,通过广播自动扩展较小数组的维度:
a = np.array([1, 2, 3])
b = 2
a * b # 广播结果:[2, 4, 6]
数学与统计函数
- 通用函数(ufunc):
np.sin()
,np.exp()
,np.sqrt()
等逐元素操作。 - 聚合函数:
np.sum()
,np.mean()
,np.max()
支持沿轴计算:arr.sum(axis=0) # 每列求和
线性代数
numpy.linalg
模块提供矩阵运算:
np.dot(A, B) # 矩阵乘法
np.linalg.inv(A) # 矩阵求逆
np.linalg.eig(A) # 特征值与特征向量
随机数生成
np.random
模块生成伪随机数:
np.random.rand(3, 2) # 均匀分布
np.random.normal(0, 1, 10) # 正态分布
np.random.randint(0, 10, 5) # 随机整数
性能优化
- 向量化:避免循环,使用内置函数。
- 内存布局:
arr.flags
查看连续性,np.ascontiguousarray()
优化。 - 预分配内存:提前创建数组避免频繁扩容。
实际应用示例
- 图像处理:RGB图像表示为三维数组(高度×宽度×通道)。
- 时间序列分析:滑动窗口计算均值或标准差。
通过掌握这些知识点,可以高效处理数值计算任务,并为深度学习框架(如TensorFlow/PyTorch)奠定基础。