Python 二维 numpy.ndarray 不带逗号的切片

Python 2D numpy.ndarray slicing without comma

最近有人告诉我通过

提取二维numpy.ndarray的前两列
firstTwoCols = some2dMatrix[:2]

这个符号来自哪里,它是如何工作的?

我只熟悉逗号分隔的切片,比如

twoCols = some2dMatrix[:,:2]

逗号前的 : 表示获取所有行,逗号后的 :2 表示获取第 0 至但不包括第 2 列。

firstTwoCols = some2dMatrix[:2]

这将只提取前 2 行和所有列。

twoCols = some2dMatrix[:,:2] 将提取所有行的前两列。

不确定我是否理解问题但是...

如果你这样做:

>>> Matrix = [[x for x in range(1,5)] for x in range(5)] 
>>> Matrix
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]

执行 Matrix[:2],它将 select Matrix[1, 2, 3, 4], [1, 2, 3, 4] 中的前两个列表。但如果你这样做:

>>> Matrix[:,:2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not tuple

但如果您使用 Numpy,请执行以下操作:

Matrix = np.array(Matrix)

>>>Matrix[:, :2]
array([[1, 2],
       [1, 2],
       [1, 2],
       [1, 2],
       [1, 2]])

您描述的语法没有提取前两列;它提取前两行。如果您指定的切片少于数组的维度,NumPy 会将其视为等同于所有进一步的切片为 :,因此

arr[:2]

相当于

arr[:2, :]

对于二维数组。