Python:二维数组的降序argsort?

Dan*_*ori 5 python arrays

我需要按数组的降序对第一列进行排序。具体来说,我的代码是:

>>> x = np.array([[2, 3], [1998,5], [1998,7]])
>>> x = x[np.argsort(x[:,0])]
Run Code Online (Sandbox Code Playgroud)

但输出是

array([[   2,    3],
       [1998,    5],
       [1998,    7]])
Run Code Online (Sandbox Code Playgroud)

但我需要按降序排列。有人可以解释我该怎么做吗?

编辑:@Babyburger建议此解决方案:

x = x[np.argsort(x[:,0])][::-1]
Run Code Online (Sandbox Code Playgroud)

array([[1998,    7],
       [1998,    5],
       [   2,    3]])
Run Code Online (Sandbox Code Playgroud)

可能很好,但我想在第一列的值相同的情况下,顺序不变。所以输出将是

array([[1998,    5],
       [1998,    7],
       [   2,    3]])
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法可以做到这一点?

Dom*_*Cat 3

sorted在这个特殊的要求中,你可以使用稳定Python :

a =  np.array([[2, 3], [1998,5], [1998,7]])
res = np.array(sorted(a, key= lambda x: -x[0]))
Run Code Online (Sandbox Code Playgroud)

它的作用是:使用每行的第一个元素进行比较(通过lambda访问器)并对其求反以获得降序。通过稳定性,如果第一个元素相同,则行将保持顺序

输出:

[[1998    5]
 [1998    7]
 [   2    3]]
Run Code Online (Sandbox Code Playgroud)

编辑:顺便说一句,如果您想在前面的列相同时按以下列排序(所有顺序都相同):

a =  np.array([[2, 3], [1998,5], [1998,7]])
res = np.array(sorted(a, key=lambda x:(-x).tolist()))
Run Code Online (Sandbox Code Playgroud)

这会将行转换为列表,然后使用序列比较。请注意,在此示例中它将按降序排序(因此(-x)