Python:2d数组的argsort按降序排列?

2024-10-01 02:34:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

>>> x = np.array([[2, 3], [1998,5], [1998,7]])
>>> x = x[np.argsort(x[:,0])]

但结果是

^{pr2}$

但我需要按降序排列。有人能给我解释一下怎么做吗?在

编辑:@Babyburger提出了这个解决方案:

x = x[np.argsort(x[:,0])][::-1]

那个给的

array([[1998,    7],
       [1998,    5],
       [   2,    3]])

可以,但我希望第一列的值相同,顺序不变。所以输出结果是

array([[1998,    5],
       [1998,    7],
       [   2,    3]])

有简单的方法吗?在


Tags: 方法代码编辑排序顺序np数组解决方案
1条回答
网友
1楼 · 发布于 2024-10-01 02:34:48

在这个特定的需求中,您可以使用python的sorted,它是{a1}:

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

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

输出:

^{pr2}$

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

^{3}$

这会将行转换为列表,然后使用sequence comparison。注意在本例中,它将按递减顺序排序(因此(-x)

相关问题 更多 >