numpy.lexsort() 是 NumPy 提供的一个基于多个键(列)进行排序的函数,适用于字典序排序(lexicographical sort),常用于对多个字段联合排序的场景。掌握 numpy.lexsort 的关键在于理解 keys 元组中键的优先级(从右到左)以及它返回的是排序索引,而不是直接排序后的数组。本文主要介绍一下NumPy中lexsort方法的使用。

numpy.lexsort

numpy.lexsort(keys, axis=-1)

使用键序列执行间接稳定排序。

给定多个可以在电子表格中解释为列的排序键,lexsort返回一个整数索引数组,该数组描述了按多个列排序的顺序。 序列中的最后一个键用于主排序顺序,倒数第二个键用于辅助排序顺序,依此类推。 keys参数必须是可以转换为相同形状的数组的对象序列。 如果为keys参数提供了2D数组,则将其行解释为排序键,并根据最后一行,倒数第二行等进行排序。

参数 :

keys(k, N) array 或 包含k(N,)形序列的tuple

要排序的k个不同的“columns”。 

最后一列(如果键是2D数组,则为行)是主排序键。

axisint, 可选

要间接排序的轴。 默认情况下,对最后一个轴进行排序。

返回值 :

indices :(N,) ndarray of ints

沿着指定的轴对键进行排序的索引数组。

例子

1)按两个字段排序(先按姓名,姓名相同时按分数)

import numpy as np

names = np.array(['Tom', 'Jane', 'Bob', 'Jane'])
scores = np.array([80, 90, 85, 85])

# 按名字升序,名字相同时按分数升序
indices = np.lexsort((scores, names))

print(indices)
print(names[indices])
print(scores[indices])

2)对二维数组的列排序

import pandas as pd
import numpy as np

data = np.array([[1, 3, 1],
                 [2, 2, 3]])

# 先按第一行排序(主键),相同情况下按第二行排序(次键)
idx = np.lexsort((data[1], data[0]))
print(idx)  # 排序后的列索引
print(data[:, idx])  # 排序后的数组

推荐文档

相关文档

大家感兴趣的内容

随机列表