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