Python numpy保留一个已排序2D数组的索引列表

Python numpy保留一个已排序2D数组的索引列表,python,arrays,sorting,numpy,Python,Arrays,Sorting,Numpy,我有一个2D numpy数组,我想创建一个新的1D数组,如果按升序排序,它是第一个数组中数字的索引。对于以下阵列: A = [[1,0,2], [0,3,0]] 我希望这样: B = [[1,1],[0,2],[0,0],[0,1],[1,0],[1,2]] 你知道如何在python中使用预定义函数来完成吗 感谢您可以使用对展开数组的索引进行排序,然后将展开索引转换回坐标: >>> i = (-a).argsort(axis=None, kind='mergeso

我有一个2D numpy数组,我想创建一个新的1D数组,如果按升序排序,它是第一个数组中数字的索引。对于以下阵列:

A = [[1,0,2],
     [0,3,0]]
我希望这样:

B = [[1,1],[0,2],[0,0],[0,1],[1,0],[1,2]]
你知道如何在python中使用预定义函数来完成吗

感谢

您可以使用对展开数组的索引进行排序,然后将展开索引转换回坐标:

>>> i = (-a).argsort(axis=None, kind='mergesort')
>>> j = np.unravel_index(i, a.shape) 
>>> np.vstack(j).T
array([[1, 1],
       [0, 2],
       [0, 0],
       [0, 1],
       [1, 0],
       [1, 2]])
-a
kind='mergesort'
用于以稳定的方式按降序对数组进行排序(以匹配您要查找的输出)

如果您不关心稳定排序,请将第一行替换为:

>>> i = a.argsort(axis=None)[::-1]

使用
np.undravel\u索引的技巧非常棒!我很高兴学习这个方法。你说的“稳定排序”是什么意思?这会对相同的值产生一致的排序吗?@stvn66我相信这会对相同的值产生一致的排序,这相当于稳定的排序