Python NumPy 入门教程:从数组创建到广播运算,快速掌握高效数值计算
Python NumPy 入门教程:从数组创建到广播运算,快速掌握高效数值计算
很多人在学完 Python 基础语法之后,都会碰到一个非常现实的问题:如果我要处理大量数字、矩阵、表格型数值数据,只靠原生 list 会不会太慢、太笨重?
这时候,NumPy 往往就是第一个必须掌握的库。
它是 Python 数值计算生态的基础组件。很多你后面会接触到的库,比如 Pandas、SciPy、scikit-learn、Matplotlib,底层都离不开它。
如果你是新手,这篇文章的目标不是把 NumPy 讲得特别学术,而是让你尽快搞明白:
NumPy到底是干什么的- 它和 Python 原生列表有什么区别
- 最常用的数组操作怎么写
- 新手最常用的广播、切片、聚合、条件筛选怎么理解
- 怎样用一个完整示例快速上手
学完之后,你至少能独立写出常见的数组计算、基础矩阵处理和简单数据预处理代码。
1. NumPy 是什么
NumPy 全名是 Numerical Python,是 Python 里最经典的数值计算库之一。
它最核心的能力是提供一个高效的多维数组对象 ndarray,以及围绕数组进行批量计算的一整套函数。
它特别适合这些场景:
- 批量数值计算
- 向量和矩阵运算
- 数据分析前的数据准备
- 科学计算和算法实验
- 机器学习里的特征处理
简单说,NumPy 的优势不是“能不能算”,而是让大量数值操作更快、更整洁、更适合批量处理。
2. 为什么很多 Python 学习者都绕不开 NumPy
如果你只处理几条数据,Python 的 list 当然够用。
但一旦进入下面这些场景,NumPy 的价值就会非常明显:
- 有一大批数字需要统一加减乘除
- 需要按行按列做统计
- 需要处理二维表格、矩阵或更高维数据
- 需要做条件筛选、归一化、标准化
- 后续还要接入
Pandas或机器学习库
比如你想把一组商品价格全部打九折,原生列表通常要写循环;用 NumPy,一行就能完成:
prices = np.array([15, 20, 35, 40])
discount = prices * 0.9
这类“整批运算”的能力,就是 NumPy 最值得学的地方。
3. 安装 NumPy
直接安装:
pip install numpy
安装后可以简单检查版本:
python -c "import numpy as np; print(np.__version__)"
导入方式通常这样写:
import numpy as np
np 是 NumPy 的常见别名,几乎所有教程和项目都这么写。
4. 先理解 NumPy 最核心的对象:ndarray
NumPy 里最重要的数据结构是 ndarray,也就是多维数组。
可以先把它理解成“比 list 更适合数值运算的数组”。
先看最简单的创建方式:
import numpy as np
arr = np.array([10, 20, 30, 40])
print(arr)
print(type(arr))
输出类似:
[10 20 30 40]
<class 'numpy.ndarray'>
二维数组也很常见:
matrix = np.array([
[1, 2, 3],
[4, 5, 6]
])
print(matrix)
这时候你就可以把它看成一个 2 行 3 列 的数值矩阵。
5. 常见的数组创建方式
5.1 从列表创建
arr = np.array([1, 2, 3, 4, 5])
5.2 创建全 0 数组
zeros = np.zeros((2, 3))
表示创建一个 2 行 3 列 的全零数组。
5.3 创建全 1 数组
ones = np.ones((3, 2))
5.4 创建连续数字
arr = np.arange(1, 10)
这会得到:
[1 2 3 4 5 6 7 8 9]
5.5 创建等间距数组
arr = np.linspace(0, 1, 5)
结果是从 0 到 1 均匀切成 5 个点。
6. shape、dtype、ndim 这几个属性一定要熟
NumPy 数组最常用的基础信息包括:
shape:形状dtype:数据类型ndim:维度数
示例:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)
print(arr.dtype)
print(arr.ndim)
输出类似:
(2, 3)
int64
2
这里的意思是:
- 数组有
2个维度 - 形状是
2 行 3 列 - 元素类型是整数
7. reshape:改变数组形状
reshape() 是 NumPy 里非常高频的方法。
arr = np.arange(1, 13)
matrix = arr.reshape(3, 4)
print(arr)
print(matrix)
输出类似:
[ 1 2 3 4 5 6 7 8 9 10 11 12]
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
这类操作特别适合把一维数据整理成二维表格结构。
8. 索引和切片
如果你会 Python 列表切片,NumPy 会很快上手,只是二维数组更常见。
arr = np.arange(1, 13).reshape(3, 4)
print(arr[1, 2])
print(arr[:, 1])
print(arr[0:2, 1:3])
含义分别是:
arr[1, 2]:第 2 行第 3 列arr[:, 1]:取第 2 列全部数据arr[0:2, 1:3]:取前两行、第 2 到第 3 列
新手一开始最重要的是先把“行列索引”的感觉建立起来。
9. NumPy 为什么适合批量运算
这是 NumPy 最核心的优势之一。
arr = np.array([1, 2, 3, 4])
print(arr + 10)
print(arr * 2)
print(arr / 2)
输出类似:
[11 12 13 14]
[2 4 6 8]
[0.5 1. 1.5 2. ]
也就是说,运算会直接作用到整个数组,而不是要求你手写循环逐个处理。
10. 广播机制,新手一定要先理解个大概
广播是 NumPy 非常经典的特性。你可以把它先简单理解成:
当不同形状的数据在某些规则下可以对齐时,NumPy 会自动帮你把较小的数据“扩展”后再计算。
最常见的例子:
prices = np.array([15, 20, 35, 40])
discount = prices * 0.9
print(discount)
这里数组里的每个元素都会乘以 0.9。
再看一个二维例子:
scores = np.array([
[80, 85, 90],
[75, 88, 92]
])
bonus = np.array([5, 0, 3])
result = scores + bonus
print(result)
这里 bonus 会按列广播到每一行。
新手不需要一开始就背复杂规则,但要先知道:NumPy 很多“看起来没写循环”的批量计算,本质上都和广播有关。
11. 聚合统计:sum、mean、max、min
做数据处理时,经常需要求和、均值、最大值、最小值。
sales = np.array([
[1200, 1500, 1800],
[1000, 1600, 1700],
[900, 1400, 2100]
])
print(sales.sum())
print(sales.mean())
print(sales.max())
print(sales.min())
如果想按行或按列统计,就用 axis:
print(sales.sum(axis=0)) # 按列求和
print(sales.mean(axis=1)) # 按行求均值
可以先记住:
axis=0:沿着行方向压缩,通常得到“每列结果”axis=1:沿着列方向压缩,通常得到“每行结果”
12. 条件筛选和布尔数组
NumPy 做筛选非常方便。
scores = np.array([88, 92, 79, 95, 90])
high_scores = scores[scores >= 90]
print(high_scores)
输出:
[92 95 90]
你也可以得到一个布尔数组:
print(scores >= 90)
输出类似:
[False True False True True]
这类写法在做数据清洗和过滤时非常常见。
13. np.where:条件替换
如果你想根据条件生成新结果,np.where() 很常用。
scores = np.array([88, 92, 79, 95, 90])
levels = np.where(scores >= 90, "A", "B")
print(levels)
输出:
['B' 'A' 'B' 'A' 'A']
这个函数在做标签转换、分段判断时很好用。
14. 随机数
做模拟实验、机器学习、测试数据生成时,随机数很常见。
推荐新写法:
rng = np.random.default_rng(seed=42)
arr = rng.integers(0, 10, size=(2, 3))
print(arr)
这里的重点有两个:
seed=42让结果可复现size=(2, 3)表示生成一个2 行 3 列的数组
15. 矩阵乘法
NumPy 当然也支持矩阵运算。
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(a @ b)
输出:
[[19 22]
[43 50]]
这里的 @ 是矩阵乘法,不是普通的逐元素乘法。
如果写成:
print(a * b)
那就是对应位置逐元素相乘。
16. 一个适合新手直接运行的完整示例
为了方便你本地练习,我把常见操作整理成了一个独立脚本:
完整代码如下:
import numpy as np
def main() -> None:
print("1. 创建数组")
scores = np.array([88, 92, 79, 95, 90])
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print("scores =", scores)
print("matrix =\n", matrix)
print("\n2. 查看形状和数据类型")
print("scores.shape =", scores.shape)
print("matrix.shape =", matrix.shape)
print("scores.dtype =", scores.dtype)
print("\n3. reshape 改变形状")
numbers = np.arange(1, 13)
reshaped = numbers.reshape(3, 4)
print("numbers =", numbers)
print("reshaped =\n", reshaped)
print("\n4. 索引和切片")
print("reshaped[1, 2] =", reshaped[1, 2])
print("reshaped[:, 1] =", reshaped[:, 1])
print("reshaped[0:2, 1:3] =\n", reshaped[0:2, 1:3])
print("\n5. 广播机制")
prices = np.array([15, 20, 35, 40], dtype=float)
discount = prices * 0.9
print("prices =", prices)
print("discount =", discount)
print("\n6. 聚合统计")
sales = np.array(
[
[1200, 1500, 1800],
[1000, 1600, 1700],
[900, 1400, 2100],
]
)
print("sales =\n", sales)
print("总销售额 =", sales.sum())
print("每个月总额 =", sales.sum(axis=0))
print("每个门店均值 =", sales.mean(axis=1))
print("\n7. 布尔筛选")
high_scores = scores[scores >= 90]
print("scores >= 90 ->", high_scores)
print("\n8. 条件替换")
levels = np.where(scores >= 90, "A", "B")
print("levels =", levels)
print("\n9. 随机数和可复现结果")
rng = np.random.default_rng(seed=42)
random_matrix = rng.integers(0, 10, size=(2, 3))
print("random_matrix =\n", random_matrix)
print("\n10. 矩阵乘法")
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print("a @ b =\n", a @ b)
if __name__ == "__main__":
main()
17. 新手学 NumPy 最容易踩的坑
- 把
list和ndarray混着理解,结果不知道为什么运算行为不同 - 分不清逐元素乘法
*和矩阵乘法@ reshape时元素个数对不上- 二维索引时把行列顺序写反
- 不理解
axis,导致统计结果方向错了
比较稳妥的学习顺序是:
- 先学数组创建、shape、dtype
- 再学索引切片和 reshape
- 再学批量运算、广播、聚合
- 最后再学随机数、矩阵计算和和其他库配合
18. 总结
NumPy 是 Python 数值计算最重要的基础库之一。对新手来说,最关键的不是一下子学会所有函数,而是先把下面几个能力练熟:
- 会创建数组
- 会看 shape 和 dtype
- 会切片和 reshape
- 会做整批运算
- 会做筛选和统计
只要这几个基础打稳,后面你去学 Pandas、数据分析、机器学习,都会轻松很多。
如果你刚开始练习,建议先把文中的示例脚本跑起来,然后自己扩展这几个方向:
- 自己构造学生成绩表并做统计
- 用随机数生成测试数据
- 自己尝试二维数组按行按列计算
- 把 NumPy 结果再交给 Pandas 做表格展示
从“会看懂”到“会自己写”,你就算真正入门 NumPy 了。
更多推荐




所有评论(0)