🐍 NumPy 超能指南:从“import np”到“花式索引”一步到位!

还在用 Python 原生列表算平均?

今天 10 分钟,把 NumPy 磨成瑞士军刀🔪------
向量化 × 广播 × 花式索引 全套带走,代码直接复制跑通!

1️⃣ 安装 & 惯用别名(全球统一暗号)

bash 复制代码
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
python 复制代码
import numpy as np  # 暗号 np.*

2️⃣ 基础对象:ndarray 🌟

python 复制代码
a = np.array([1, 2, 3], dtype=np.int32)   # 1-D
b = np.array([[1, 2], [3, 4]], dtype=float)  # 2-D
属性 说明 示例
a.ndim 维度 1
a.shape 形状 (3,)
a.size 元素总数 3
a.dtype 数据类型 int32

3️⃣ 高效创建函数:一行顶列表循环十条 🚀

python 复制代码
np.zeros((3, 4))        # 全 0
np.ones((2, 3, 4))      # 全 1
np.full((2, 2), 7)      # 全 7
np.eye(3)               # 单位矩阵
np.arange(0, 10, 2)     # [0 2 4 6 8]
np.linspace(0, 1, 5)    # 等分 5 段
np.random.default_rng(42).random((2,3))  # 0-1 随机

4️⃣ 向量化计算:告别 Python 慢循环 🐌➡️⚡️

python 复制代码
x = np.arange(1e6)
y = x**2 + 3*x - 1     # 百万级一次完成

性能对比

python 复制代码
import timeit
py_list = list(range(100000))
np_arr  = np.arange(100000)

timeit.timeit(lambda: [i**2 for i in py_list], number=10)
# >>> 0.28 s
timeit.timeit(lambda: np_arr**2, number=10)
# >>> 0.007 s  ← 40 倍提速

5️⃣ 广播机制:形状不同也能算!📻

python 复制代码
a = np.array([[1], [2], [3]])      # 3×1
b = np.array([10, 20])             # 1×2
a + b                              # 3×2 结果
'''
[[11 21]
 [12 22]
 [13 23]]
'''

规则:末尾维度相等 or 1,即可自动扩展。


6️⃣ 花式索引:一键提取、赋值 💎

python 复制代码
arr = np.arange(16).reshape(4,4)
# 取 2×2 块
arr[1:3, 1:3]
# 布尔 Mask
mask = arr % 3 == 0
arr[mask]           # 所有 3 的倍数
arr[mask] = -1      # 批量改值

7️⃣ 常用统计: axis 参数玩明白 📊

python 复制代码
c = np.array([[1, 2, 3],
              [4, 5, 6]])
np.sum(c, axis=0)   # 按列 [5 7 9]
np.sum(c, axis=1)   # 按行 [ 6 15]
np.mean(c)
np.std(c, dtype=np.float64)

8️⃣ 线性代数秒杀:一行解方程 🧮

python 复制代码
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
x = np.linalg.solve(A, b)   # array([2., 3.])

其他:
np.dot · np.linalg.inv · np.linalg.eig · svd · det


9️⃣ 性能黑科技:einsum 求和 🌪️

python 复制代码
# 矩阵乘法 C = AB
C = np.einsum('ik,kj->ij', A, B)
# 比裸 for 快 10-50 倍,比 np.dot 还省内存

🔟 易错点提醒 ⚠️

错误示例 正确
原地改值 a = a + 1 会新数组 想省内存 a += 1
维度不一致 [1,2] + [[1],[2]] 直接报错 先 reshape / 广播
浮点比较 np.where(x == 0.3) 可能失败 np.isclose

🏁 一句话总结(背它!)

"NumPy = Python 列表的涡轮增压器"

向量化加速、广播塑形、花式索引、线性代数一行搞定!🏎️


相关推荐
小小张说故事4 小时前
BeautifulSoup:Python网页解析的优雅利器
后端·爬虫·python
怒放吧德德4 小时前
后端 Mock 实战:Spring Boot 3 实现入站 & 出站接口模拟
java·后端·设计
biyezuopinvip4 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
UrbanJazzerati4 小时前
Python编程基础:类(class)和构造函数
后端·面试
楚兴4 小时前
MacBook M1 安装 OpenClaw 完整指南
人工智能·后端
Java编程爱好者4 小时前
2026版Java面试八股文总结(春招+秋招+社招),建议收藏。
后端
朱昆鹏5 小时前
开源 Claude Code + Codex + 面板 的未来vibecoding平台
前端·后端·github
REDcker5 小时前
gRPC开发者快速入门
服务器·c++·后端·grpc
figo10tf5 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva5 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端