【发布时间】:2015-06-01 21:36:12
【问题描述】:
最近有人告诉我提取 2D numpy.ndarray by 的前两列
firstTwoCols = some2dMatrix[:2]
这个符号来自哪里,它是如何工作的?
我只熟悉逗号分隔的切片
twoCols = some2dMatrix[:,:2]
逗号前的: 表示获取所有行,逗号后的:2 表示从第 0 列到第 2 列,但不包括第 2 列。
【问题讨论】:
最近有人告诉我提取 2D numpy.ndarray by 的前两列
firstTwoCols = some2dMatrix[:2]
这个符号来自哪里,它是如何工作的?
我只熟悉逗号分隔的切片
twoCols = some2dMatrix[:,:2]
逗号前的: 表示获取所有行,逗号后的:2 表示从第 0 列到第 2 列,但不包括第 2 列。
【问题讨论】:
firstTwoCols = some2dMatrix[:2]
这将只提取包含所有列的前 2 行。
twoCols = some2dMatrix[:,:2] 将提取所有行的前 2 列。
【讨论】:
您描述的语法没有提取前两列;它提取前两行。如果您指定的切片少于数组的维度,NumPy 会将其视为等同于所有其他切片为:,因此
arr[:2]
等价于
arr[: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],它会选择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]])
【讨论】: