核心概念
1. 数组维度(Dimensions)
NumPy数组的维度通过中括号嵌套层数来判断:
- 一层
[]:一维数组(1D) - 两层
[]:二维数组(2D) - 三层
[]:三维数组(3D)
2. NumPy与深度学习的关系
NumPy数组可以看作是PyTorch或TensorFlow中Tensor的基础版本。掌握NumPy操作能大大降低学习深度学习框架的难度。
数组创建
基础创建方法
import numpy as np
# 一维数组
a = np.array([2, 4, 6, 8, 10, 12])
# 二维数组
b = np.array([[2, 4, 6], [8, 10, 12]])
# 查看数组形状
a.shape # (6,)
b.shape # (2, 3)
特殊数组创建
# 全零矩阵
zeros = np.zeros((2, 3))
# 全1数组
ones = np.ones((3,))
# 顺序数组
arange = np.arange(1, 10) # [1, 2, 3, ..., 9]
随机数组创建
|--------------------------|-----------|---------|---------------------|
| 方法 | 范围 | 用途 | 记忆口诀 |
| np.random.randint(a,b) | [a,b]整数 | 随机索引/标签 | int=整数 |
| random.random() | [0,1)浮点 | 简单概率 | 最基础 |
| np.random.rand() | [0,1)均匀 | 蒙特卡洛模拟 | rand=random+uniform |
| np.random.randn() | 标准正态分布 | 深度学习初始化 | n=normal |
# 标准正态分布(均值0,标准差1)
c = np.random.randn(2, 2)
# 指定均值和标准差的正态分布
scores = np.random.normal(75, 10, 10)
数组运算
基础运算
a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8], [9, 10], [11, 12]])
# 逐元素运算
a + b # 对应位置相加
a - b # 对应位置相减
a * b # 对应位置相乘(点乘)
a / b # 对应位置相除
矩阵运算
# 矩阵乘法(需要满足维度要求)
a @ b.T # 3x2 与 2x3 相乘,得到 3x3
# 矩阵转置
a.T
数组索引
一维数组索引
arr1d = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 单个元素
arr1d[0] # 第一个元素:0
arr1d[-1] # 最后一个元素:9
# 多个元素
arr1d[[3, 5, 8]] # 取索引为3,5,8的元素
# 切片
arr1d[2:6] # 取索引2到5的元素:[2, 3, 4, 5]
arr1d[:5] # 从头到索引5:[0, 1, 2, 3, 4]
arr1d[4:] # 从索引4到末尾:[4, 5, 6, 7, 8, 9]
arr1d[::2] # 每隔一个取一个:[0, 2, 4, 6, 8]
二维数组索引
arr2d = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]])
# 行列顺序:第一个索引是行,第二个是列
# 取整行
arr2d[1, :] # 第1行的所有元素
arr2d[1] # 同上,可以省略:
# 取整列
arr2d[:, 2] # 第2列的所有元素
# 取单个元素
arr2d[2, 3] # 第2行第3列的元素:12
# 取多行
arr2d[[0, 2], :] # 第0行和第2行
# 取多列
arr2d[:, [1, 3]] # 第1列和第3列
# 取子矩阵
arr2d[1:3, 1:3] # 第1-2行,第1-2列
三维数组索引
arr3d = np.arange(3 * 4 * 5).reshape((3, 4, 5))
# 取某一层
arr3d[1, :, :] # 第1层的所有数据
# 取某一层的部分行
arr3d[1, 0:2, :] # 第1层的前两行
# 取某一层的子矩阵
arr3d[1, 0:2, 2:4] # 第1层的前两行,第2-3列
数组属性
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 形状
arr.shape # (2, 3)
# 维度数
arr.ndim # 2
# 元素总数
arr.size # 6
# 数据类型
arr.dtype # dtype('int64')
常用函数
arr = np.array([5, 9, 9, 11, 11, 13, 15, 19])
# 统计函数
np.max(arr) # 最大值
np.min(arr) # 最小值
np.argmax(arr) # 最大值的索引
np.argmin(arr) # 最小值的索引
np.sum(arr) # 求和
np.mean(arr) # 平均值
np.std(arr) # 标准差
总结
- NumPy数组是Python中进行数值计算的基础
- 理解数组维度和索引是使用NumPy的关键
- 掌握NumPy操作能为后续深度学习学习打下基础
- 数组运算比Python列表快得多,适合处理大规模数据