numpy
库的全面详细介绍,涵盖其核心功能、底层机制、高级用法及实际应用场景。
numpy
(Numerical Python)是 Python 生态中用于高性能科学计算的基础库,其核心是 多维数组对象(ndarray
),支持矢量化运算、广播机制和底层 C 优化。它广泛应用于数据科学、机器学习、信号处理等领域,是 pandas
、scikit-learn
、TensorFlow
等库的底层依赖。
numpy
是 Python 中用于科学计算的核心库之一,专为高效处理多维数组和矩阵运算设计。它在数据科学、机器学习、工程计算等领域广泛应用。以下是其核心特性和常见用法:
OpenCV
底层依赖 numpy
)。scikit-learn
、TensorFlow
等库的底层支持。特性 | numpy 数组 | Python 列表 |
---|---|---|
元素类型 | 必须相同 | 可以不同 |
内存占用 | 紧凑,连续内存 | 分散,存储对象引用 |
运算速度 | 快(C 优化) | 慢(解释型循环) |
功能 | 丰富的数学函数和操作 | 基础操作 |
ndarray
多维数组int32
、float64
),通过 dtype
参数指定。shape
属性描述数组的维度(如 (3, 4)
表示 3 行 4 列)。import numpy as np
# 创建 2x3 数组,指定数据类型为 float32
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
print(arr.shape) # (2, 3)
print(arr.dtype) # float32
+
, -
, *
, /
, **
等)和逻辑运算符(>
, ==
等)。a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # [5 7 9]
print(a * 2) # [2 4 6]
print(a > 1) # [False True True]
允许不同形状的数组进行算术运算,规则如下:
# 3x3 矩阵 + 1x3 行向量 → 自动广播为 3x3
matrix = np.ones((3, 3))
row = np.array([1, 2, 3])
result = matrix + row # 等价于 matrix + row.reshape(1, 3)
np.sin()
, np.exp()
, np.log()
。np.frompyfunc()
将 Python 函数转换为 ufunc。arr = np.array([0, np.pi/2, np.pi])
print(np.sin(arr)) # [0. 1. 0.]
arr = np.arange(12).reshape(3, 4)
# 基础切片
print(arr[1, :]) # 第2行:[4 5 6 7]
print(arr[:, 1::2]) # 所有行,第2列开始,每隔一列取一列
# 布尔索引
mask = arr > 5
print(arr[mask]) # [6, 7, 8, 9, 10, 11]
# 花式索引
print(arr[[0, 2], [1, 3]]) # 取(0,1)和(2,3)位置的元素 → [1, 11]
reshape()
, resize()
, flatten()
。T
, transpose()
, swapaxes()
。np.concatenate()
, np.split()
, np.vstack()
/np.hstack()
。a = np.array([[1, 2], [3, 4]])
# 转置
print(a.T) # [[1 3], [2 4]]
# 调整形状为 4x1
b = a.reshape(4, 1)
# 垂直堆叠
c = np.vstack([a, [[5, 6]]]) # 3x2 矩阵
sum()
, mean()
, std()
, min()
, max()
。axis
参数控制计算方向(如 axis=0
按列计算)。arr = np.array([[1, 2], [3, 4]])
print(np.sum(arr)) # 10(全局求和)
print(np.mean(arr, axis=0)) # [2. 3.](按列求均值)
@
或 np.dot()
。np.linalg.inv()
, np.linalg.svd()
。np.linalg.det()
, np.linalg.eig()
。A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# 矩阵乘法
print(A @ B) # [[19 22], [43 50]]
# 求逆矩阵
inv_A = np.linalg.inv(A)
order
参数控制。# 创建 C 顺序数组(默认)
arr_c = np.array([[1, 2], [3, 4]], order='C')
# 创建 Fortran 顺序数组
arr_f = np.array([[1, 2], [3, 4]], order='F')
支持类似表格的异构数据类型(类似 pandas
的 DataFrame)。
# 定义结构化数据类型
dtype = [('name', 'S10'), ('age', 'i4'), ('score', 'f4')]
data = np.array([('Alice', 25, 89.5), ('Bob', 30, 92.0)], dtype=dtype)
# 按字段访问
print(data['name']) # [b'Alice' b'Bob']
numpy
vs 纯 Pythonimport time
# 纯 Python 列表求和
py_list = list(range(1_000_000))
start = time.time()
sum(py_list)
print("Python time:", time.time() - start) # ~0.05s
# numpy 数组求和
np_arr = np.arange(1_000_000)
start = time.time()
np.sum(np_arr)
print("Numpy time:", time.time() - start) # ~0.0005s
pandas
:DataFrame
和 Series
底层使用 numpy
数组。matplotlib
:直接绘制 numpy
数组数据。scipy
:基于 numpy
提供科学计算高级函数(如信号处理、优化算法)。pandas
)。pip install numpy
掌握 numpy
后,可进一步学习 pandas
(数据处理)和 scipy
(科学计算),构建完整的数据分析工具链。