为什么需要冒号来表示行而不是矩阵的列?
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)
) 元组。
我一直在从 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)
) 元组。