Numpy 基础知识 - 如何在数组访问中解释 [:,]



我有一个 nd-array A

A.shape
(2, 500, 3)

A[:]A[:,2]有什么区别

来自 Python,数组访问中的","让我感到非常困惑。

逗号分隔每个维度的下标。因此,例如,如果矩阵M定义为

M = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])

那么M[2, 1]将是 8(第三行,第二列)。

每个维度的下标也可以是一个切片,其中:表示一个完整的切片,就像普通 Python 序列中的切片一样。 例如,M[:, 2]将从每一行中选择第三列,这将是[3, 6, 9]

未提供下标的任何其他维度都是隐式完整切片。 在您的示例中,A[:,2]等效于A[:, 2, :]。如果您认为(2, 500, 3)形数组是两个具有 500 行和 3 列的堆叠矩阵,那么A[:, 2, :]将从两个矩阵中选择第三行(以及第三行的每一列),其形状应为(2, 3)

当您具有多维 NumPy 数组时,如果您提供slice()对象的元组,切片操作[]可以工作。如果元组数与您的维数不匹配,则等效于在所有剩余维度中都有一个slice(None)(缩写为:)。另请注意,NumPy 也接受...,这意味着"用:填充其余维度"——如果您想"填充"初始维度,这尤其有用。

因此,概括一下以下表达式,在A数组上给出相同的结果A.ndim == 3

A[:, 2]
A[:, 2, :]
A[:, 2, ...]

A[slice(None), 2]
A[slice(None), 2, slice(None)]
A[(slice(None), 2) + tuple(slice(None) for _ in range(A.ndim - 2))]

最新更新