np.lexsort排序逻辑解析及代码输出[1 2 0]疑问解答
理解numpy.lexsort的排序逻辑
我来帮你捋清楚这个困惑!你没搞懂的核心点在于np.lexsort的参数优先级顺序——它是从右往左使用传入的数组作为排序键的,也就是说:
- 传入的元组里,最右边的数组是第一排序键(主键)
- 往左依次是第二、第三排序键,只有当主键的值相同时,才会用左边的次键来进一步排序
结合你的代码具体分析:
import numpy as np first_names = (5,5,5) last_names = (3,1,2) x = np.lexsort((first_names, last_names)) print(x) # 输出 [1 2 0]
这里你传入的排序键元组是(first_names, last_names),所以:
- 第一排序键是
last_names(元组最右侧的元素) - 第二排序键是
first_names,但因为first_names的所有值都是5,完全相同,所以这个键根本不会影响排序结果
现在看last_names的具体值和对应索引:
- 索引0对应值3
- 索引1对应值1
- 索引2对应值2
np.lexsort默认是升序排序,所以对last_names的值从小到大排序后,对应的索引顺序就是:
值1(索引1)→ 值2(索引2)→ 值3(索引0),也就是[1,2,0],这就是你看到的输出啦!
再给你个小例子巩固下,如果first_names有不同的值,比如first_names = (5,6,5),那当last_names的值相同时(假设有的话),就会用first_names来排序。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

