多角度学习python numpy维度(python中多维数组的操作方法)

多角度学习python numpy维度(python中多维数组的操作方法)

编程文章jaq1232025-07-23 15:11:015A+A-

学习 k-means 算法时被下面算式整懵逼了,对于 np.linalg.norm 搜索下算法含义即可,但是参数 X[:, np.newaxis] - centroids, axis=2 是如何计算的?

np.linalg.norm(X[:, np.newaxis] - centroids, axis=2)

本着复杂问题拆分为小问题各个击破思想,我们来学习下 numpy 数组操作。

numpy X[:, np.newaxis] 为数组 增加新维度

操作

一维数组效果

二维数组效果

X[np.newaxis, :]

(1, N) 行向量

(1, 行, 列)

X[:, np.newaxis]

(N, 1) 列向量

(行, 1, 列)

X[:, :, np.newaxis]

-

(行, 列, 1)

对于一维数组,我们使用 [5, 6, 7],演示下添加新维度效果

对于二维数组,我们使用[[2, 3, 4], [5, 6, 7]],演示下添加新维度效果


numpy的广播机制

numpy 广播通过自动扩展较小数组的维度,使其与较大数组的形状兼容。规则如下:

  • 维度对齐:

从最右维度开始向左逐维度比较形状。

若维度数不同,在较小数组的左侧补1(如形状 (3,) 与 (2,3) 对齐时变为 (1,3) )。

  • 维度兼容:

两个数组在某一维度上需满足:大小相等 或 其中一个大小为1(如 (3,1) 与 (3,4) 兼容)。

  • 扩展执行:

大小为1的维度会被复制扩展至另一数组的对应维度大小(如 (1,3) 扩展为 (2,3) )。

对于一维数组,我们使用 [5, 6, 7],在新增维度后演示下扩展维度效果

对于二维数组,我们使用[[2, 3, 4], [5, 6, 7]],在新增维度后演示下扩展维度效果

numpy 轴

numpy数组的维度称为轴(axis),从左向右编号:

一维数组: axis=0 (唯一维度)即(axis=0)

二维数组: axis=0 (行)、 axis=1 (列)即(axis=0, axis=1)

三维数组: axis=0 (块/深度)、 axis=1 (行)、 axis=2 即(axis=0, axis=1, axis=3)

二维数组沿各个轴求和,举例说明如下

三维数组沿各个轴求和,举例说明如下


我们假定 X 维度是(300, 2)即300个二维坐标,centroids 维度是(3, 2)即3个二维坐标,来看下下面算式含义

X[:, np.newaxis] - centroids, axis=2

X[:, np.newaxis] 是指维度(300, 2)添加一维度变为(300, 1, 2)。

X[:, np.newaxis] - centroids 通过 numpy 扩展机制,X 维度 (300, 1, 2) 扩展为 (300, 3, 2),centroids 维度 (3, 2) 扩展为 (300, 3, 2),然后两数组相减。

axis=2 表示对三维数组中的列维进行操作。

点击这里复制本文地址 以上内容由jaq123整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

苍茫编程网 © All Rights Reserved.  蜀ICP备2024111239号-21