NumPy(上):核心数据结构详解
一、NumPy简介
NumPy 是Python科学计算的基础包,提供了多维数组对象(ndarray)及高效的数组操作。安装方式为 conda install numpy 或 pip install numpy。
学习NumPy的意义:
-
PyTorch的Tensor与NumPy数组计算逻辑高度相似; -
NumPy广泛用于Pandas、SciPy等模块; -
图像处理本质上就是将图片转为NumPy数组后再进行处理。
二、NumPy数组 vs Python列表
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
三、创建数组的多种方式
1. np.array() 与 np.asarray()
-
将列表传入即可创建数组,支持任意维度。 -
np.array()是深拷贝,np.asarray()是浅拷贝,注意区分使用场景。
2. np.ones() 与 np.zeros()
-
创建全1或全0数组,需指定 shape,可选指定dtype。 -
示例: np.ones((2,3)) * 0.5可用于初始化权重。
3. np.arange([start,] stop [, step, dtype])
-
创建 [start, stop)区间、步长为step的数组(左闭右开)。 -
示例: np.arange(2, 9, 3)→array([2, 5, 8])
4. np.linspace(start, stop, num=50, endpoint=True)
-
创建从 start 到 stop 的等差数列, num指定元素个数,endpoint决定是否包含 stop。
四、数组的关键属性
|
|
|
|
|---|---|---|
ndim |
|
ndim=2
|
shape |
|
(2,3)
|
size |
|
|
dtype |
|
|
注意事项:
-
未指定类型时NumPy自动推断(如int64); -
使用 astype()可改变数据类型,但会创建新数组,原数组不变; -
不能直接修改 dtype属性(如arr.dtype = 'int32'),会导致数据错乱。
五、形状变换:reshape
-
arr.reshape(newshape):不改变元素内容,只改变形状,变换前后元素总数必须相同。 -
np.reshape(a, newshape, order)中的order参数: -
** 'C'**(默认):行优先(类C语言) -
** 'F'**:列优先(类Fortran语言) -
** 'A'**:按原数组存储方式决定
示例:数组 [[0,1,2],[3,4,5]] reshape为(3,2):
-
'C'方式:[[0,1],[2,3],[4,5]] -
'F'方式:[[0,4],[3,2],[1,5]]
六、数组的轴(axis)——核心难点
1. 基本概念
轴即维度,从0开始计数。二维数组中,0轴=行,1轴=列。
2. 聚合计算
以 (4,3) 矩阵(4名同学对3款游戏的评分)为例:
-
沿0轴聚合(每款游戏的总分): np.sum(score, axis=0)→ 结果形状(3,) -
沿1轴聚合(每位同学的总分): np.sum(score, axis=1)→ 结果形状(4,)
3. 多维数组的形状变化规律
形状为 (a, b, c) 的数组沿某轴聚合后:
-
axis=0 → (b, c) -
axis=1 → (a, c) -
axis=2 → (a, b)
4. 适用场景
axis 参数广泛用于 sum、max、min、mean、argmin、argmax 等聚合函数。
七、每课一练
问题:计算每位用户对三款游戏打分的平均分。
解答:
# 方法一
np.average(interest_score, axis=1)
# 方法二
np.mean(interest_score, axis=1)
# 加权平均
np.average(interest_score, weights=weights, axis=1)
普通求平均时两者输出一致,np.average 还可用于加权平均。
八、小结
-
NumPy 是Python科学计算的基础,与PyTorch Tensor知识融会贯通,常用于数据预处理和后处理。 -
重点掌握:使用 np.asarray创建数组、数组属性(ndim、shape、dtype、size)的灵活使用、形状变化与数据类型转换。 -
轴的概念 在聚合函数中非常重要,建议从二维数组逐步推理到多维数组,理解不同轴方向上的聚合变化。

