python数组降序排序_Python:argsort按降序排列为2d数组?

本文介绍了如何使用numpy数组对第一列进行降序排列,同时保持行内顺序不变。提供了两种方法:一种是使用argsort配合[::-1],另一种是利用Python的sorted函数结合lambda表达式。对于特殊需求,如当第一列值相同时保持原始顺序,给出了稳定的排序解决方案。
摘要由CSDN通过智能技术生成

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

>>> 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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值