假设我有一个N维np.array(或只是一个列表)和一个N个索引列表。在不使用循环的情况下索引数组的首选/有效方法是什么?
# 4D array with shape of (2, 3, 4, 5)
arr = np.random.random((2, 3, 4, 5))
index = [0, 2, 1, 3]
result = ??? # Equivalent to arr[0, 2, 1, 3]
此外,仅提供3D索引,结果应该是最后一维的数组。
index = [0, 2, 1]
result2 = ??? # Equivalent to arr[0, 2, 1]
请注意,我无法使用通常的语法进行索引,因为实现必须处理不同形状的数组。
我知道NumPy支持通过数组进行索引,但行为方式不同,因为它从数组中选择值而不是通过维度(https://docs.scipy.org/doc/numpy/user/basics.indexing.html)进行索引。
答案 0 :(得分:3)
每the docs:
如果向索引提供元组,则元组将被解释为索引列表。
因此,将index
更改为元组:
In [46]: np.allclose(arr[tuple([0,2,1])], arr[0,2,1])
Out[46]: True
In [47]: np.allclose(arr[tuple([0,2,1,3])], arr[0,2,1,3])
Out[47]: True