按两列中的值对NumPy数组进行排序

时间:2015-12-08 17:05:28

标签: python arrays sorting numpy

所以我是一个二维数组,当使用a[np.argsort(-a[:,1])]按第二列排序时,如下所示:

array([[ 30.        ,  98.7804878 ],
       [ 24.        ,  98.7804878 ],
       [ 21.        ,  98.7804878 ],
       [ 26.        ,  98.7804878 ],
       [ 20.        ,  98.70875179],
       [  4.        ,  98.27833572],
       [  1.        ,   7.10186514]])

现在我想用最低的" id"来排序。列,所以它看起来像这样:

array([[ 21.        ,  98.7804878 ],
       [ 24.        ,  98.7804878 ],
       [ 26.        ,  98.7804878 ],
       [ 30.        ,  98.7804878 ],
       [ 20.        ,  98.70875179],
       [  4.        ,  98.27833572],
       [  1.        ,   7.10186514]])

我无法弄清楚如何做到这一点,即使我从第一个中取出最高百分比然后再订购它们。

1 个答案:

答案 0 :(得分:4)

您可以使用np.lexsort

>>> a[np.lexsort((a[:, 0], -a[:, 1]))]
array([[ 21.        ,  98.7804878 ],
       [ 24.        ,  98.7804878 ],
       [ 26.        ,  98.7804878 ],
       [ 30.        ,  98.7804878 ],
       [ 20.        ,  98.70875179],
       [  4.        ,  98.27833572],
       [  1.        ,   7.10186514]])

-a[:, 1]排序,然后按a[:, 0]排序,返回索引数组,而不是用于索引a