用列表切片数组

问题描述 投票:4回答:1

所以,我创建了一个numpy数组:

a = np.arange(25).reshape(5,5)

array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,13,14],[15、16、17、18、19],[20,21,22,23,24]])

常规切片a[1:3,1:3]返回

array([[6,7],[11,12]])

[使用第二个a[1:3,[1,2]]中的列表一样

array([[6,7],[11,12]])

但是,a[[1,2],[1,2]]返回

array([6,12])

显然,我在这里不了解某些内容。就是说,切片列表有时可能非常有用。

干杯,

keng

python arrays slice
1个回答
0
投票

在最后一种情况下,两个单独的列表被视为单独的索引操作(这确实很尴尬,请耐心等待。)>

Numpy看到两个包含两个整数的列表,并因此决定要两个值。每个值的行索引来自第一个列表,而每个值的列索引来自第二个列表。因此,您得到a[1,1]a[2,2]:表示法不仅扩展到您已经精确推导出的列表,而且还告诉numpy您希望该范围内的所有行/列。

如果您提供手动管理的列表索引,则它们的大小必须相同,因为每个/任何列表的大小都是您将获得的元素数。例如,如果您想要第1,2,3行的第1列和第2列中的元素:

>>> a[1:4,[1,2]]
array([[ 6,  7],
       [11, 12],
       [16, 17]])

但是

>>> a[[1,2,3],[1,2]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,)

[前者告诉numpy,您需要一定范围的行和特定的列,而后者则说“让我得到(1,1)(2,2)(3, hey! what the?! where's the other index?)的元素”


0
投票

a[[1,2],[1,2]]读为,我想要a [1,1]和a [2,2]。有几种解决方法,我可能甚至没有最好的方法,但是您可以尝试


0
投票

它触发advanced indexing,所以第一个切片是行索引,第二个是列索引。对于每一行,它选择相应的列。

© www.soinside.com 2019 - 2024. All rights reserved.