Skip to main content
 首页 » 编程设计

python之检查 numpy 数组是否按字典顺序排序

2025年05月04日25lhb25

如何检查 numpy 数组序列是否按字典顺序排序?

>>> x = np.asarray([0, 0, 1, 1]) 
>>> y = np.asarray([0, 1, 0, 2]) 
>>> is_lex_sorted([x, y]) 
True 
 
>>> x = np.asarray([100, 0, 1, 1]) 
>>> y = np.asarray([0, 1, 0, 2]) 
>>> is_lex_sorted([x, y]) 
False 

理想情况下,此检查将以线性时间运行并以 NumPy 速度运行。理想情况下,它还能够在第一次遇到错误结果时快速返回。

请您参考如下方法:

使用纯 NumPy 函数的 is_lexsorted 实现几乎肯定需要对一个或多个数组进行多次传递(因为 NumPy 函数旨在一次性对整个数组进行操作)。

这意味着如果速度是首要考虑因素,用 numba 或 Cython 编写函数可能是更好的选择。

有一个这样的 Cython 函数已经在 pandas 中实现为 is_lexsorted .这具有您指定的短路行为,并且其运行时间与数组的数量和长度成线性关系。

>>> from pandas.algos import is_lexsorted  
>>> x = np.asarray([0, 0, 1, 1]) 
>>> y = np.asarray([0, 1, 0, 2]) 
>>> is_lexsorted([x, y]) 
True 

(对于 pandas 0.20.0+ 使用 from pandas.lib import is_lexsorted。)

在 pandas 中,它用于检查 MultiIndexes 的级别是否已排序。但是,请注意,它不在公共(public) API 中,因此将来可能会发生变化。