numpy多维索引:使用np数组并列出不同的结果

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

为什么b1 b2给出不同的结果,但是b0,b1,b3给出相同的结果。并得到一个“ FutureWarning:不建议使用非元组序列进行多维索引;使用arr[tuple(seq)]代替arr[seq]。将来,它将被解释为数组索引arr[np.array(seq)],这将导致错误或错误。结果不同。“

a = np.array([[6, 7], [8, 9]])
print(a.shape)
print(a)
print()

b0 = a[[0, 0]]
print('b0')
print(b0.shape)
print(b0)
print()

b1 = a[[[0, 0]]]
print('b1')
print(b1.shape)
print(b1)
print()

b2 = a[np.array([[0, 0]])]
print('b2')
print(b2.shape)
print(b2)
print()

b3= a[np.array([0, 0])]
print('b3')
print(b3.shape)
print(b3)

(2,2)[[6 7][8 9]]

b0(2,2)[[6 7][6 7]]

b1(2,2)[[6 7][6 7]]

b2(1,2,2)[[[6 7][6 7]]]

b3(2,2)[[6 7][6 7]]

numpy numpy-ndarray array-broadcasting numpy-slicing
1个回答
0
投票

根据历史]

b1 = a[[[0, 0]]]

被/评估为

b1 = a[([0, 0],)]
b1 = a[[0, 0]]

警告告诉我们此异常已得到纠正。

类似于a[i,j]的索引实际上是a[(i,j)],将元组传递给getitem方法。由于过去各种软件包的合并,在某些情况下,列表的解释方式相同。您找到了一个。

未来的警告是告诉我们,进行高级索引的最干净,最清晰的方法是使用元组和数组。使用列表时存在模棱两可的地方。

在1.15.0版本说明弃用中对此进行了描述,

不推荐使用除元组以外的任何内容的多维索引。这意味着ind = [slice(None),0]中的索引列表; arr [ind]应该更改为一个元组,例如,ind = [slice(None),0]; arr [tuple(ind)]或arr [(slice(None),́0)]。为了避免诸如arr [[[[0,1],[0,1]]]之类的表达式含糊不清,必须将其更改为arr [array([0,Â1]),array([0,1])] ,将来会被解释为arr [array([[0,1],[[0,1]])]]。

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