首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按几列对numpy进行降序排序

问按几列对numpy进行降序排序
EN

Stack Overflow用户
提问于 2022-02-03 02:11:46
回答 1查看 229关注 0票数 0

我有NumPy数组,需要按两列排序(首先按0列排序,然后按第1列排序相等的值),这两个列都是降序的。当我尝试按列1和列0顺序排序时,第二次排序中相等的行将在第一次排序中按升序排序。

我的阵列:

代码语言:javascript
复制
arr = np.array([
    [150, 8],
    [105, 20],
    [90, 100],
    [101, 12],
    [110, 80],
    [105, 100],
])

当我进行两次排序时(按第1栏和第0栏):

代码语言:javascript
复制
arr = arr[arr[:,1].argsort(kind='stable')[::-1]]
arr = arr[arr[:,0].argsort(kind='stable')[::-1]]

我得到了这个结果(交换了第2行和第3行):

代码语言:javascript
复制
array([[150,   8],
       [110,  80],
       [105,  20],
       [105, 100],
       [101,  12],
       [ 90, 100]])

据我所知,之所以会发生这种情况,是因为稳定模式保留了等值的原始顺序,但当我们翻转索引使顺序下降时,原来的顺序也会发生变化。

我想要的结果是:

代码语言:javascript
复制
array([[150,   8],
       [110,  80],
       [105, 100],
       [105,  20],
       [101,  12],
       [ 90, 100]])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-03 02:57:06

使用numpy.lexsort同时对多列进行排序。

代码语言:javascript
复制
arr = np.array([
    [150, 8],
    [105, 20],
    [90, 100],
    [101, 12],
    [110, 80],
    [105, 100],
])

order = np.lexsort([arr[:, 1], arr[:, 0]])[::-1]
arr[order]

产量:

代码语言:javascript
复制
array([[150,   8],
       [110,  80],
       [105, 100],
       [105,  20],
       [101,  12],
       [ 90, 100]])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70965163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档