跳转至

NumPy 数值计算

一句话概述:NumPy 是 Python 科学计算的基石,提供高性能的多维数组(ndarray)和数学运算,几乎所有数据科学/机器学习库都建立在它之上。最新版 NumPy 2.4(2026)。

核心知识点

概念白话解释
ndarrayN维数组 = NumPy 的核心数据结构(比 Python 列表快 50 倍)
dtype数据类型 = 数组元素的类型(int32、float64 等)
Broadcasting广播 = 不同形状的数组自动对齐运算
Vectorization向量化 = 用数组运算代替 for 循环(快得多)
Axis轴 = 操作的维度方向(axis=0 按行,axis=1 按列)

安装配置

pip install numpy                                    # 安装
python -c "import numpy; print(numpy.__version__)"   # 验证(2.4.x)

基本使用

import numpy as np                                    # 导入

# 创建数组
a = np.array([1, 2, 3, 4, 5])                        # 从列表创建
b = np.zeros((3, 4))                                  # 3x4 全零矩阵
c = np.ones((2, 3))                                   # 2x3 全一矩阵
d = np.arange(0, 10, 2)                               # [0, 2, 4, 6, 8]
e = np.linspace(0, 1, 5)                              # 0到1均分5个点
f = np.random.randn(3, 3)                             # 3x3 标准正态随机

# 数组属性
print(f.shape)                                        # 形状 (3, 3)
print(f.dtype)                                        # 数据类型 float64
print(f.ndim)                                         # 维度数 2
print(f.size)                                         # 元素总数 9

# 索引和切片
arr = np.arange(12).reshape(3, 4)                     # 3x4 矩阵
print(arr[0, 1])                                      # 第0行第1列
print(arr[:, 2])                                      # 第2列所有行
print(arr[1:, :2])                                    # 第1行起,前2列

# 数组运算(向量化 — 无需 for 循环)
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print(x + y)                                          # 逐元素加 [5, 7, 9]
print(x * y)                                          # 逐元素乘 [4, 10, 18]
print(np.dot(x, y))                                   # 点积 32
print(x @ y)                                          # 点积(@ 运算符)

# 统计函数
data = np.random.randn(1000)                          # 1000 个随机数
print(f"均值: {np.mean(data):.4f}")                   # 均值
print(f"标准差: {np.std(data):.4f}")                  # 标准差
print(f"中位数: {np.median(data):.4f}")               # 中位数
print(f"最大值: {np.max(data):.4f}")                  # 最大值
print(f"百分位: {np.percentile(data, 95):.4f}")       # 95 百分位

高级用法

广播机制

# 广播:不同形状自动对齐
matrix = np.ones((3, 4))                              # 3x4 矩阵
vector = np.array([1, 2, 3, 4])                       # 1x4 向量
result = matrix + vector                              # 自动扩展行维度

# 标准化(每列减去均值,除以标准差)
data = np.random.randn(100, 5)                        # 100 样本 5 特征
mean = data.mean(axis=0)                              # 每列均值
std = data.std(axis=0)                                # 每列标准差
normalized = (data - mean) / std                      # 广播标准化

线性代数

A = np.array([[1, 2], [3, 4]])                        # 2x2 矩阵
print(np.linalg.det(A))                               # 行列式
print(np.linalg.inv(A))                               # 逆矩阵
eigenvalues, eigenvectors = np.linalg.eig(A)          # 特征值分解
U, S, Vt = np.linalg.svd(A)                           # SVD 分解

条件筛选

data = np.random.randn(100)                           # 100 个随机数
positive = data[data > 0]                             # 筛选正数
outliers = data[np.abs(data) > 2]                     # 筛选异常值
np.where(data > 0, data, 0)                           # 负数替换为 0

常见报错

报错信息原因解决方法
ValueError: shape mismatch数组形状不兼容检查 .shape 属性
AxisError: axis out of bounds轴编号超范围2D 数组只有 axis=0 和 1
MemoryError数组太大float32 替代 float64

速查表

# === 创建 ===
np.array([1,2,3])                 # 从列表
np.zeros((m,n))                   # 全零
np.ones((m,n))                    # 全一
np.eye(n)                         # 单位矩阵
np.arange(start, stop, step)      # 等差
np.linspace(start, stop, num)     # 均分
np.random.randn(m,n)              # 正态随机

# === 变形 ===
arr.reshape(m,n)                  # 重塑
arr.T                             # 转置
arr.flatten()                     # 展平
np.concatenate([a,b], axis=0)     # 拼接
np.split(arr, n)                  # 切分

# === 统计 ===
np.mean/std/var/min/max/sum(arr, axis=)  # 基本统计
np.percentile(arr, q)             # 百分位
np.corrcoef(x, y)                 # 相关系数

参考:NumPy 文档 | 最新版 2.4.1 (2026.01) | 更新于 2026 年