numpy.lexsort #
- 麻木的。lexsort (键,轴= -1 ) #
使用键序列执行间接稳定排序。
给定多个排序键(可以解释为电子表格中的列),lexsort 返回一个整数索引数组,用于描述多列的排序顺序。序列中的最后一个键用于主要排序顺序,倒数第二个键用于辅助排序顺序,依此类推。键参数必须是可以转换为相同形状的数组的对象序列。如果为keys参数提供了一个二维数组,它的行将被解释为排序键,并且根据最后一行、倒数第二行等进行排序。
- 参数:
- 键(k, N) 包含 k(N,) 形序列的数组或元组
要排序的k 个不同“列”。最后一列(或行,如果 键是二维数组)是主排序键。
- 轴int,可选
要间接排序的轴。默认情况下,按最后一个轴排序。
- 返回:
- 整数的索引(N,) ndarray
沿指定轴对键进行排序的索引数组。
也可以看看
argsort
间接排序。
ndarray.sort
就地排序。
sort
返回数组的排序副本。
例子
姓名排序:首先按姓氏,然后按姓名。
>>> 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])