我要寻找一个量化的方式来索引numpy.array的numpy.array索引。
numpy.array
例如:
import numpy as np a = np.array([[0,3,4], [5,6,0], [0,1,9]]) inds = np.array([[0,1], [1,2], [0,2]])
我想建立一个新的数组,以便该数组中的每一行(i)都是array的row(i)a,并由数组inds(i)的行索引。我想要的输出是:
a
array([[ 0., 3.], # a[0][:,[0,1]] [ 6., 0.], # a[1][:,[1,2]] [ 0., 9.]]) # a[2][:,[0,2]]
我可以通过循环来实现:
def loop_way(my_array, my_indices): new_array = np.empty(my_indices.shape) for i in xrange(len(my_indices)): new_array[i, :] = my_array[i][:, my_indices[i]] return new_array
但我正在寻找一种纯矢量化的解决方案。
使用索引数组对另一个数组进行索引时,每个索引数组的形状应与 输出 数组的形状匹配。您希望列索引匹配inds,并且您希望行索引匹配输出的行,例如:
inds
array([[0, 0], [1, 1], [2, 2]])
由于广播的缘故,您只能使用上面的一列,因此您可以使用np.arange(3)[:,None]vertical,arange因为它会None插入新的轴:
np.arange(3)[:,None]
arange
None
>>> np.arange(3)[:, None] array([[0], [1], [2]])
最后,一起:
>>> a[np.arange(3)[:,None], inds] array([[0, 3], # a[0,[0,1]] [6, 0], # a[1,[1,2]] [0, 9]]) # a[2,[0,2]]