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

Jos*_*ase 2 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]])
Run Code Online (Sandbox Code Playgroud)

现在我想按最低的“id”列对它进行排序,所以它看起来像这样:

array([[ 21.        ,  98.7804878 ],
       [ 24.        ,  98.7804878 ],
       [ 26.        ,  98.7804878 ],
       [ 30.        ,  98.7804878 ],
       [ 20.        ,  98.70875179],
       [  4.        ,  98.27833572],
       [  1.        ,   7.10186514]])
Run Code Online (Sandbox Code Playgroud)

我不知道怎么做,即使我从第一个中获取最高的百分比然后订购它们。

Ale*_*ley 7

您可以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]])
Run Code Online (Sandbox Code Playgroud)

这对 by-a[:, 1]和 by 进行排序a[:, 0],返回一个索引数组,您可以使用它来索引a