开发者社区> 问答> 正文

最好的方法是根据一列对numpy数组进行排序,然后对另一列进行子排序?

嗨,我相信这是一个最好的例子,可以说明这个问题。

我有一个numpy数组

array =  
[[ 101  27]
 [6  355]
 [6400 85]
 [ 33 96]]

我想基于第二列中的值对数组进行排序(升序)以获取

array =  
[[ 101  27]
[6400 85]
[ 33 96]
[6  355]]

然后,我想按第一列升序排序,但仅适用于第一行和第二行。然后重复第三和第四行。

这最后一步可以用伪代码解释:

if array[0][0] > array[1][0]:
    transpose array[0] and array[1]
if array[2][0] > array[3][0]:
    transpose array[2] and array[3]

这给出:

array =  
[[ 101  27]
[6400 85]
[6  355]
[ 33 96]]

我可以轻松地做到这一点,但是代码不是很好,我假设有一种优雅/有效的方式来做到这一点?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 22:41:45 660 0
1 条回答
写回答
取消 提交回答
  • 您可以在python中使用内置的sorted函数来轻松完成任务,

    尝试这个:

    array = sorted(array, key=lambda x: x[1])
    array[:2] = sorted(array[:2], key=lambda x: x[0]) # sort first two rows by first col
    array[2:] = sorted(array[2:], key=lambda x: x[0]) # sort next two rows by first col
    
    print(array)
    

    输出:

    [[101, 27],
    [6400, 85], 
    [6, 355], 
    [33, 96]]
    

    回答来源:stackoverflow

    2020-03-24 22:41:53
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载