numpy多级排序lexsort函数的使用

 更新时间:2023年03月27日 15:03:20   作者:地球被支点撬走啦  
本文主要介绍了numpy多级排序lexsort函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、lexsort() 排的是个啥

 lexsort() 函数的定义如下:

def lexsort(keys, axis=None)

lexsort是一种多级排序方法。作用为对给定的 keys 中的最后一个 key 排序,每一个 key 都被认为是列向量,其他 keys 用来辅助最后一个 key 进行排序。最后返回最后一个 key 进行排序的索引。

哈哈哈是不是没看懂上面的解释?莫慌莫慌,我给举个简单的例子保证秒懂,可以回想这样一个场景:

对一堆学生的成绩进行排名,则排名结果就是按照总成绩从低到高排序,这个还没排序的总成绩表就是上述说的最后一个 key ,排序后的索引就是上述的返回值。

比如初始总成绩数组为:[99, 100, 98, 95, 80]  ,这就是 最后一个 key,升序排序后的数组为:[80, 95, 98, 99, 100],对应的索引为:[4, 3, 2, 0, 1],这个索引数组就是 lexsort 函数的返回值。

但是如果两个人的总成绩一样怎么进一步排序呢?这时可以按照语文成绩的升序进行排序,如果语文成绩还一样呢?那再看数学成绩,如果数学还一样呢?再查英语成绩,如果还。。。(没了没了,再相同我就要怀疑这俩人作弊了!)这里的 语文成绩、数学成绩、英语成绩 就是最后一个 key 前面的 keys,记得是从后往前数的。也就是最后一个 key 相同,就看倒数第二个 key,倒数第二个相同就看倒数第三个 key。

2、举个例子

默认你已经理解了,那就举一个例子来过一遍:

import numpy as np
a = [[3, 3, 8],
     [6, 9, 7],
     [3, 3, 2]]
b = np.array(a)  # 转换为 numpy 数组
"""
index = np.lexsort((b[:, 2], b[:, 1], b[:, 0])) 的运行情况:
step-1、首先按照第一列 b[:, 0] 的数值 [3, 6, 3] 升序顺序对每行的位置进行重排, 第一行有两个值相同, 转到step-2
            [[3, 3, 8],        [[3, 3, 8],
             [6, 9, 7],   -->   [3, 3, 2],   
             [3, 3, 2]]         [6, 9, 7]]
step-2、第一列数值相同的情况下按照相应位置第二列 b[:, 1] 的值继续排序, 第二列对应位置任然相同, 转到step-3
            [[3, 3, 8],        [[3, 3, 8],
             [6, 9, 7],   -->   [3, 3, 2],   
             [3, 3, 2]]         [6, 9, 7]]
step-3、第二列数值相同的情况下按照相应位置第三列 b[:, 2] 的值继续排序
            [[3, 3, 8],        [[3, 3, 2],
             [6, 9, 7],   -->   [3, 3, 8],   
             [3, 3, 2]]         [6, 9, 7]]
总结: 第一列的排序结果为[3, 3, 6] 对应的索引值为 [2, 0, 1]
"""
index = np.lexsort((b[:, 2], b[:, 1], b[:, 0]))
print(index)  # 输出结果: [2 0 1]
ans = b[index] # 按照排序结果重置数组元素的位置
print(ans)
# ans 的结果:
[[3 3 2]
 [3 3 8]
 [6 9 7]]

如果直接对矩阵进行排序呢?

"""
相当于拆解为
key1 = b[0,:]
key2 = b[1,:]
key3 = b[2,:]  # 最后一行为主排序序列
index = np.lexsort(b) 等效为: index = np.lexsort((b[0,:], b[1,:], b[2,:]))
"""
index = np.lexsort(b) 
print(index)  # 输出结果: [2 0 1]

即,当输入是一个矩阵时,默认排序最后一行的数据,前面的行都是辅助行。

到此这篇关于numpy多级排序lexsort函数的使用的文章就介绍到这了,更多相关numpy lexsort函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用pycharm生成代码模板的实例

    使用pycharm生成代码模板的实例

    今天小编就为大家分享一篇使用pycharm生成代码模板的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python 异步之如何启动获取事件循环

    Python 异步之如何启动获取事件循环

    这篇文章主要为大家介绍了Python 异步之如何启动获取事件循环示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 如何使用Python VTK高亮显示actor

    如何使用Python VTK高亮显示actor

    这篇文章主要介绍了如何使用Python VTK高亮显示actor,通过Python-VTK在同一个窗口中,高亮显示选中的actor。本例子中的代码,当窗口中的圆球actor被选中时,会变成红色,并且会显示actor三遍面片边缘信息,下文相关内容需要的小伙伴可以参考一下
    2022-04-04
  • 用python画圣诞树三种代码示例介绍

    用python画圣诞树三种代码示例介绍

    大家好,本篇文章主要讲的是用python画圣诞树三种代码示例介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Windows 8.1 64bit下搭建 Scrapy 0.22 环境

    Windows 8.1 64bit下搭建 Scrapy 0.22 环境

    这篇文章主要介绍了Windows 8.1 64bit下搭建 Scrapy 0.22 环境,需要的朋友可以参考下
    2018-11-11
  • 使用python 3实现发送邮件功能

    使用python 3实现发送邮件功能

    本文通过实例代码给大家介绍了使用python 3实现发送邮件功能,代码简单易懂非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • Python数据清洗&预处理入门教程

    Python数据清洗&预处理入门教程

    凡事预则立,不预则废,训练机器学习模型也是如此。数据清洗和预处理是模型训练之前的必要过程,否则模型可能就废了。本文是一个初学者指南,将带你领略如何在任意的数据集上,针对任意一个机器学习模型,完成数据预处理工作
    2022-10-10
  • Python利用字典树实现猎词游戏

    Python利用字典树实现猎词游戏

    猎词(word hunt)是一类很常见的游戏,给你一张字母组成的表,然后让你在这些字母中尽可能多的去寻找单词。这类游戏用字典树就能轻松完成,本文就来具体讲讲实现步骤,需要的可以参考一下
    2022-06-06
  • Python导入引用其他文件的函数实战案例(推荐!)

    Python导入引用其他文件的函数实战案例(推荐!)

    这篇文章主要给大家介绍了关于Python导入引用其他文件的函数的相关资料,文中通过代码以及图文介绍的非常详细,对大家学习或者使用Python具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Python编程实现控制cmd命令行显示颜色的方法示例

    Python编程实现控制cmd命令行显示颜色的方法示例

    这篇文章主要介绍了Python编程实现控制cmd命令行显示颜色的方法,结合实例形式分析了Python针对命令行字符串显示颜色属性相关操作技巧,需要的朋友可以参考下
    2017-08-08

最新评论