Python numpy如何保持一个已排序的二维数组中每个元素的索引列表

9
我可以帮助您翻译。这段内容是关于编程的,讨论了如何从一个二维numpy数组中创建一个新的一维数组,其中包含第一个数组中数字的索引,如果它们按升序排序。以下是示例数组:
A = [[1,0,2],
     [0,3,0]]

我希望它像这样:

B = [[1,1],[0,2],[0,0],[0,1],[1,0],[1,2]]

你有没有想过如何使用预定义函数在Python中实现它?

谢谢

1个回答

13
你可以使用 argsort 对展平后的数组进行排序,然后使用 unravel_index 将平坦的索引转换回坐标。
>>> 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]])

-akind='mergesort'是为了以稳定的方式按降序排序数组(以匹配您要查找的输出结果)。

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

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

1
使用 np.unravel_index 的提示真是太棒了!我很高兴学到了这个方法。 - Steven C. Howell
“稳定排序”是什么意思?这是否会为相同的值产生一致的排序结果? - Steven C. Howell
1
@stvn66 我相信这确实会为相同值产生一致的排序,这等同于稳定排序。 - ahajib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接