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

Python 为什么需要冒号来表示矩阵的行而不是列?,python,numpy,matrix,row,Python,Numpy,Matrix,Row,我一直在从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]在Python中是无效的语

我一直在从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]
在Python中是无效的语法。而
[0,]
是完全合法的。

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

:,0
是一个包含两个元素的元组;一个
切片(None,None,None)
对象(因此,从开始到结束用步骤1进行切片),以及整数0。但是,表示法
,0
无效。逗号前必须有一个表达式,不能留空

另一方面,
0,
是一个有效的元组。它只包含一个元素,即整数
0
。由于数组中有多个维度,
numpy
可以推断出您希望对其余维度使用所有元素,因此不需要给它一个
0:
(=
0,slice(None,None,None)
)元组。

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

:,0
是一个包含两个元素的元组;一个
切片(None,None,None)
对象(因此,从开始到结束用步骤1进行切片),以及整数0。但是,表示法
,0
无效。逗号前必须有一个表达式,不能留空


另一方面,
0,
是一个有效的元组。它只包含一个元素,即整数
0
。由于数组中有多个维度,
numpy
可以推断出您希望对其余维度使用所有元素,因此您不需要给它一个
0:
(=
0,slice(None,None,None)
)元组。

这是答案的一部分,如果不是全部的话
[,0]
确实返回了一个
语法错误
。如果Python不允许,那么
numpy.\uu getitem\uuuu
永远没有机会将其扩展到
(slice(None),0)
。这是答案的一部分,如果不是全部的话
[,0]
确实返回了一个
语法错误
。如果Python不允许,那么
numpy.\uu getitem\uuuu
永远没有机会将其扩展到
(slice(None),0)