当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python numpy lexsort用法及代码示例


本文简要介绍 python 语言中 numpy.lexsort 的用法。

用法:

numpy.lexsort(keys, axis=- 1)

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

给定多个排序键(可以解释为电子表格中的列),lexsort 返回一个整数索引数组,用于说明多列的排序顺序。序列中的最后一个键用于主要排序顺序,倒数第二个键用于辅助排序顺序,依此类推。键参数必须是可以转换为相同形状的数组的对象序列。如果为keys参数提供了一个二维数组,它的行将被解释为排序键,并且根据最后一行、倒数第二行等进行排序。

参数

keys (k, N) 数组或包含 k (N,) 形序列的元组

k 个不同的“columns” 进行排序。最后一列(如果键是二维数组,则为行)是主排序键。

axis 整数,可选

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

返回

indices (N,) 整数数组

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

例子

姓名排序:首先按姓氏,然后按名字。

>>> surnames =    ('Hertz',    'Galilei', 'Hertz')
>>> first_names = ('Heinrich', 'Galileo', 'Gustav')
>>> ind = np.lexsort((first_names, surnames))
>>> ind
array([1, 2, 0])
>>> [surnames[i] + ", " + first_names[i] for i in ind]
['Galilei, Galileo', 'Hertz, Gustav', 'Hertz, Heinrich']

对两列数字进行排序:

>>> a = [1,5,1,4,3,4,4] # First column
>>> b = [9,4,0,4,0,2,1] # Second column
>>> ind = np.lexsort((b,a)) # Sort by a, then by b
>>> ind
array([2, 0, 4, 6, 5, 3, 1])
>>> [(a[i],b[i]) for i in ind]
[(1, 0), (1, 9), (3, 0), (4, 1), (4, 2), (4, 4), (5, 4)]

请注意,首先根据 a 的元素进行排序。二次排序是根据 b 的元素进行的。

正常的 argsort 会产生:

>>> [(a[i],b[i]) for i in np.argsort(a)]
[(1, 9), (1, 0), (3, 0), (4, 4), (4, 2), (4, 1), (5, 4)]

结构化数组按词法排序 argsort

>>> x = np.array([(1,9), (5,4), (1,0), (4,4), (3,0), (4,2), (4,1)],
...              dtype=np.dtype([('x', int), ('y', int)]))
>>> np.argsort(x) # or np.argsort(x, order=('x', 'y'))
array([2, 0, 4, 6, 5, 3, 1])

相关用法


注:本文由纯净天空筛选整理自numpy.org大神的英文原创作品 numpy.lexsort。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。