学习 NumPy 的核心思想
在学习具体函数之前,请先理解这几个核心概念,这将让你事半功倍:
- NumPy 的核心是
ndarray(N维数组):这是一个快速、紧凑的多维容器,用于存储同类型数据。这与 Python 的列表(可以存储不同类型数据)有本质区别。 - 向量化操作 :这是 NumPy 快的原因。避免使用 Python 的
for循环对数组元素逐个处理,而是直接对整个数组进行数学运算。 - 广播机制:这是 NumPy 的一个强大功能,它允许不同形状的数组进行数学运算。
学习路径(四步走)
阶段一:基础入门(建立感觉)
目标:学会创建数组、进行最基本的操作,感受向量化的威力。
-
安装与导入
pip install numpy import numpy as np # 这是标准惯例 -
创建数组
- 从列表创建:
np.array([1, 2, 3]) - 创建全0数组:
np.zeros(5)/np.zeros((3, 4))(创建3行4列的矩阵) - 创建全1数组:
np.ones(5) - 创建等差数列:
np.arange(0, 10, 2)(类似 range) - 创建线性间隔数组:
np.linspace(0, 1, 5)(在0和1之间生成5个等间隔的数) - 创建随机数组:
np.random.rand(3, 3)(0-1之间的随机数)
- 从列表创建:
-
数组属性
arr.shape:数组的维度,例如(5,)表示一维5个元素,(2, 3)表示2行3列。arr.ndim:数组的轴(维度)数量。arr.size:数组的元素总数。arr.dtype:数组元素的数据类型(如int64,float32)。
-
基本运算(体验向量化)
- 算术运算:
a + b,a - b,a * b(注意:这是逐元素相乘,不是矩阵乘法 ),a / b,a ** 2 - 比较运算:
a > b会返回一个布尔数组。
- 算术运算:
阶段二:核心操作(重中之重)
目标:掌握索引、切片、形状操作等核心技能,这是日常使用最频繁的部分。
-
索引与切片(和 Python 列表类似,但支持多维度)
arr = np.arange(10) # [0 1 2 3 4 5 6 7 8 9] print(arr[5]) # 索引:5 print(arr[2:7]) # 切片:[2 3 4 5 6] arr_2d = np.array([[1,2,3], [4,5,6]]) print(arr_2d[1, 2]) # 索引第二行第三列:6 print(arr_2d[:, 1]) # 切片:所有行的第二列:[2, 5] -
布尔索引(非常实用!)
arr = np.array([1, 2, 3, 4, 5]) print(arr[arr > 2]) # 输出大于2的元素:[3, 4, 5] -
形状操作
arr.reshape():改变数组形状,不改变数据。arr.reshape(2, 5)arr.flatten()或arr.ravel():将数组展平为一维。arr.T:数组的转置。
-
数组拼接与分割
np.concatenate([a, b])np.vstack([a, b])(垂直堆叠)np.hstack([a, b])(水平堆叠)np.split(arr, indices)
阶段三:常用函数(熟能生巧)
目标:熟悉 NumPy 提供的各种数学和统计函数。
- 数学函数
np.sin(arr),np.cos(arr),np.exp(arr)(指数),np.log(arr)(对数)
- 统计函数
arr.sum(),arr.mean()(平均值),arr.std()(标准差),arr.min(),arr.max()- 指定轴操作 :
arr.sum(axis=0)对每一列 求和;arr.sum(axis=1)对每一行求和。这是多维数组的难点和重点!
- 线性代数 (可选,但机器学习很重要)
np.dot(a, b)或a @ b:矩阵乘法。np.linalg.inv(arr):矩阵求逆。np.linalg.det(arr):行列式。
阶段四:实践与深入(融会贯通)
-
做小项目:
- 用 NumPy 实现一个简单的图像处理(将图片视为三维数组
[高度, 宽度, 通道],进行灰度化、裁剪、翻转等)。 - 用 NumPy 模拟一个简单的随机游走或蒙特卡洛模拟。
- 用 NumPy 从头实现一个简单的线性回归。
- 用 NumPy 实现一个简单的图像处理(将图片视为三维数组
-
理解广播规则:仔细阅读官方文档关于广播的说明,并尝试一些例子。
-
阅读优秀代码:在 GitHub 上看看别人是如何在项目中使用 NumPy 的。
学习资源推荐
- 最佳资源:官方文档 !
- NumPy 用户指南
- NumPy 绝对入门指南:非常适合零基础起步。
- 交互式教程 :
- Google 的 Colab:提供一个免费的 Jupyter Notebook 环境,可以直接在上面写代码,无需本地安装。
- 在 Colab 或 Jupyter Notebook 中跟着例子敲代码,并随时查看变量的
shape和值,这是最佳学习方式。
- 经典书籍 :
- 《利用 Python 进行数据分析》(Wes McKinney 著):虽然重点在 Pandas,但前几章关于 NumPy 的介绍非常精炼实用。
常见误区与建议
- 不要用
for循环:初学者的本能是写循环,但要时刻提醒自己"有没有向量化的方法?"。 - 时刻关注数组的
shape:很多错误都是因为数组形状不匹配导致的。使用print(arr.shape)来调试。 - 理解"视图"与"副本" :切片操作返回的是原数组的视图 ,修改视图会影响原数组。使用
arr.copy()可以创建副本。
总结一下你的学习循环:
看概念 -> 在 Jupyter/Colab 里敲代码实践 -> 不理解就查文档/搜索 -> 做个小练习巩固 -> 重复。