我需要按数组的第一列降序排序。具体来说,我的代码是:
>>> 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/