Python:二维数组的argsort按降序排列?

标签 python arrays

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

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

但是输出是

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

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

编辑:@Babyburger 建议这个解决方案:

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

给予

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

这可能没问题,但我希望第一列的值相同,顺序不变。所以输出将是

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

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

最佳答案

在此特定要求中,您可以使用 python 的 sorted ,即 stable :

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

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

输出:

[[1998    5]
 [1998    7]
 [   2    3]]

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

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

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

关于Python:二维数组的argsort按降序排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37856290/

相关文章:

python - Numpy:ImportError:无法导入名称 TestCase

arrays - 打乱一组不均匀重复的条目,使它们不重复

python - Daemonize,使程序在 python/wx.python 中后台运行

python - QTableWidget - 将按钮拖放到 QTableWidget 中的单元格中

c - C中的数组问题

javascript - 如何取出双数组中的对象

javascript - 将零移动到数组的末尾并保留非零元素而不改变顺序

javascript - 比较 2 个对象数组并过滤结果数组

python - 为什么我的递归搜索功能不起作用?

python - 使用简单的 PyQT UI 选择目录路径粉碎