为什么需要冒号来表示行而不是矩阵的列?

Why is the colon needed to represent the row but not for the column of a matrix?

我一直在从 Matlab 迁移到 NumPy/Scipy。有一件基本的事情我不太清楚。

当我们有一个像下面这样的二维数组时:

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

为了表示第一列和第一行,我们使用以下表达式。

col = x[:, 0]
row = x[0, ]

所以,我们看到 : 不需要表示行,但是 : 需要表示列。

谁能解释一下是什么原因?

仅仅是因为[,0]是Python中的无效语法。而 [0,] 是完全合法的。

切片表示法使用 元组 来指示要切片的内容。

:, 0 是一个有两个元素的元组;一个 slice(None, None, None) 对象(因此使用步骤 1 从头到尾切片)和整数 0。然而,符号 , 0 无效 Python。你必须在逗号前有一个表达式,你不能把它留空。

另一方面,

0, 是一个有效的元组。它只包含一个元素,整数 0。因为你的数组中有不止一个维度,numpy 可以推断你想对剩余的维度使用所有元素,所以你不需要给它一个 0, : (== 0, slice(None, None, None)) 元组。