【第2月 - day6】NumPy 基础知识讲解
以下是专为新手设计的 NumPy 基础入门指南,通过通俗易懂的语言和实际案例,带你快速掌握核心操作!
一、NumPy 是什么?
NumPy 是 Python 的 科学计算核心库,擅长处理多维数组(如矩阵)和数学运算,是数据分析、机器学习的必备工具。
👉 核心优势:比 Python 原生列表快 50 倍以上,且支持向量化运算(避免写循环)!
二、安装与导入
-
安装(已安装可跳过)
打开终端(Terminal),输入:pip install numpy
-
导入库
import numpy as np # 约定俗成的缩写为 np
三、核心概念:数组(Array)
NumPy 的核心是 ndarray
(N-dimensional array),即多维数组。
1. 创建数组
方法 | 代码示例 | 输出 |
---|---|---|
从列表创建 | np.array([1, 2, 3]) | array([1, 2, 3]) |
全零数组 | np.zeros(3) | array([0., 0., 0.]) |
全1数组 | np.ones((2, 3)) | 2行3列的全1矩阵 |
等差数列 | np.arange(0, 10, 2) | array([0, 2, 4, 6, 8]) |
随机数组(0~1) | np.random.rand(2, 2) | 2x2的随机数矩阵 |
2. 数组属性
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # 形状:(2, 3) → 2行3列
print(arr.ndim) # 维度:2 → 二维数组
print(arr.dtype) # 数据类型:int32(自动推断)
四、数组操作(超实用!)
1. 索引与切片
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 获取单个元素(第2行第3列)
print(arr[1, 2]) # 输出:6
# 切片(前两行,所有列)
print(arr[:2, :]) # 输出:[[1 2 3], [4 5 6]]
2. 变形(Reshape)
arr = np.arange(12)
new_arr = arr.reshape(3, 4) # 转为3行4列矩阵
3. 数学运算
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(np.sum(a)) # 求和:6
4. 广播机制(Broadcasting)
当数组形状不同时,NumPy 会自动扩展较小数组的维度,使它们可运算:
a = np.array([[1], [2], [3]]) # 3x1
b = np.array([4, 5, 6]) # 3
print(a + b) # 输出:
# [[5, 6, 7],
# [6, 7, 8],
# [7, 8, 9]]
五、常用函数速查表
函数 | 作用 | 示例 |
---|---|---|
np.max() | 找最大值 | np.max([1, 2, 3]) → 3 |
np.min() | 找最小值 | np.min([1, 2, 3]) → 1 |
np.mean() | 计算平均值 | np.mean([1, 2, 3]) → 2 |
np.dot(a, b) | 矩阵乘法(点积) | np.dot([1,2], [3,4]) → 11 |
np.linspace(0,1,5) | 生成等间隔数组 | [0., 0.25, 0.5, 0.75, 1.] |
六、新手常见问题
1. 如何判断是否是 NumPy 数组?
print(type(arr)) # 输出:<class 'numpy.ndarray'>
2. 为什么数组运算报错?
检查形状是否匹配:
a = np.array([1, 2])
b = np.array([[3], [4]])
print(a + b) # 正确!广播机制生效 → 2x2矩阵
3. 如何保存/加载数组?
np.save('data.npy', arr) # 保存
loaded_arr = np.load('data.npy') # 加载
七、总结
- NumPy 核心:数组操作 + 向量化运算。
- 关键技能:创建数组、索引切片、变形、数学运算。
- 下一步:学习 Pandas(数据分析)或 Matplotlib(绘图)!
练习任务:创建一个 5x5 的随机矩阵,计算每一列的平均值,并找到最大值所在的索引!