首页 > 解决方案 > 排序数组的索引

问题描述

我有一个包含实数的形状 (nrows,ncols) 的二维数组。我想按降序获取与数组值相对应的索引(行,列)。检查 np.argsort() 的文档,它似乎只返回按特定轴排序的索引。我确信这应该很简单,但我就是想不通。

例如,如果我有:

[
[1   5   6]
[7   4   9]
[8   2   3]
]  

所需的输出是:

[
(1,2),
(2,0),
(1,0),
(0,2),
(0,1),
(1,1),
(2,2),
(2,1),
(0,0),
 ]

标签: python-3.xnumpy

解决方案


这是降序的一种方法 -

In [19]: a
Out[19]: 
array([[1, 5, 6],
       [7, 4, 9],
       [8, 2, 3]])

In [20]: np.c_[np.unravel_index(a.ravel().argsort()[::-1],a.shape)]
Out[20]: 
array([[1, 2],
       [2, 0],
       [1, 0],
       [0, 2],
       [0, 1],
       [1, 1],
       [2, 2],
       [2, 1],
       [0, 0]])

对于升序,跳过翻转部分:[::-1]

或负值 -

In [24]: np.c_[np.unravel_index((-a).ravel().argsort(),a.shape)]
Out[24]: 
array([[1, 2],
       [2, 0],
       [1, 0],
       [0, 2],
       [0, 1],
       [1, 1],
       [2, 2],
       [2, 1],
       [0, 0]])

推荐阅读