Python 基于两个numpy数组获取排序索引的最有效方法

Python 基于两个numpy数组获取排序索引的最有效方法,python,numpy,Python,Numpy,仅考虑来自另一个numpy数组(val)的某些索引,如何获得numpy数组(distance)的排序索引 例如,考虑两个NUMPY数组VALL和以下的距离: val = np.array([[10, 0, 0, 0, 0], [0, 0, 10, 0, 10], [0, 10, 10, 0, 0], [0, 0, 0, 10, 0], [0, 0

仅考虑来自另一个numpy数组(val)的某些索引,如何获得numpy数组(distance)的排序索引

例如,考虑两个NUMPY数组VALL和以下的距离:

val = np.array([[10, 0,  0,  0,  0],
                [0,  0,  10, 0,  10],
                [0,  10, 10, 0,  0],
                [0,  0,  0,  10, 0],
                [0,  0,  0,  0,  0]])


distance = np.array([[4, 3, 2, 3, 4],
                     [3, 2, 1, 2, 3],
                     [2, 1, 0, 1, 2],
                     [3, 2, 1, 2, 3],
                     [4, 3, 2, 3, 4]])
val==10的距离是4,1,3,1,0,2。我希望将它们排序为0、1、1、2、3、4,并从距离数组返回相应的索引

返回类似于:

(array([2, 1, 2, 3, 1, 0], dtype=int64), array([2, 2, 1, 3, 4, 0], dtype=int64))
或:

因为第二个和第三个元素都有距离“1”,所以我猜索引可以互换


尝试使用
np.where、np.argsort、np.argpartition、np.undravel_index的组合,但似乎无法正确使用
这里有一种方法可以使用
屏蔽-

In [20]: mask = val==10

In [21]: np.argwhere(mask)[distance[mask].argsort()]
Out[21]: 
array([[2, 2],
       [1, 2],
       [2, 1],
       [3, 3],
       [1, 4],
       [0, 0]])

那么最终的预期结果是什么?Divakar,我更新了问题。Yakym,它只返回距离(其值),而不返回索引
In [20]: mask = val==10

In [21]: np.argwhere(mask)[distance[mask].argsort()]
Out[21]: 
array([[2, 2],
       [1, 2],
       [2, 1],
       [3, 3],
       [1, 4],
       [0, 0]])