python多列排序_用python中的numpy.lexsort()对矩阵按照某行(列)排序

python多列排序_用python中的numpy.lexsort()对矩阵按照某行(列)排序lexsort()是numpy下的一个函数,可以实现对数组或列表按照某一行或列进行排序

webchat.jpg

lexsort()是numpy下的一个函数,可以实现对数组或列表按照某一行或列进行排序。

lexsort(keys, axis=-1)字面意思:用键值序列提供一个间接稳定的排序

返回一个描述多列排序次序的整数数组。键值序列的最后一个键值提供主排序顺序,倒数第二个提供第二个排序顺序……

如果键值参数是一个2D数组,那么数组的行就是排序的键,将会按照最后一行、倒数第二行……来排序

官网给出的几个例子:

Sort names: first by surname, then by name.1

2

3

4

5

6import numpy as np

surnames = (‘Hertz’, ‘Galilei’, ‘Hertz’)

first_names = (‘Heinrich’, ‘Galileo’, ‘Gustav’)

ind = np.lexsort((first_names, surnames))

ind

array([1, 2, 0])

这里ind就是函数按照surnames,first_names排序后返回的序号,排序过程为,先按照surnames提供的序列进行升序排序,当遇到相同的元素时,按照对应的first_names中的元素进行升序排列。

1

2>>>[surnames[i] + “, ” + first_names[i] for i in ind]

[‘Galilei, Galileo’, ‘Hertz, Gustav’, ‘Hertz, Heinrich’]

利用lexsort()对二维数组按照某一列排序

lexsort()的键参数是二维数组时,对行排序,排序的方式是先对最后一行排序,当有相同元素时,然后按照倒数第二行对应的元素排序,……以此类推。1

2

3

4

5

6

7

8

9>>>a=np.array([[1,2,1,5],[5,3,6,9],[6,2,9,5]])

>>>a

>>>array([[1, 2, 1, 5],

[5, 3, 6, 9],

[6, 2, 9, 5]])

>>>a1=np.lexsort(a)

>>>a1

>>>array([1, 3, 0, 2])

al返回的是a的最后一行按照从小到大排列后所对应的索引值,比如最后一行为[6,2,9,5],从小到达排列为:2,5,6,9;其相对的索引号为:1,3,0,2。

如果对a按照第二行升序排列,当有相同项时按照第一行升序排序,那么排序方法如下:

ind=np.lexsort(a[0:2,:])

A=a.T[ind].T

或者

A=a[:,ind]

这里需要注意,a[ind]是将a矩阵按照ind的次序对其行进行排列

利用lexsot()对数组按照某一列升序排列

注意lexsort()的特点,那么只需将数组矩阵做转置,将列变成行,行变成列就可以了。例如:对a矩阵按照第二列升序排列,当遇到相同元素时按照第一列升序排列。首先对a矩阵转置,这样矩阵的列变成了行,然后在对行按照第二行升序的方式排列,都获取相应的序列编号:

1

2

3

4

5

6

7

8

9

10

11

12

13>>>a=np.array([[1,2,1,5],[5,3,6,9],[6,2,9,5]])

>>>a

>>>array([[1, 2, 1, 5],

[5, 3, 6, 9],

[6, 2, 9, 5]])

>>>a2=np.lexsort(a.T[:2,:])

>>>a2

>>>array([0, 2, 1])

>>>a[a2,:]

array([[1, 2, 1, 5],

[6, 2, 9, 5],

[5, 3, 6, 9]])

后面有机会在研究一下axis怎么取值,以及对比一下sort、argsort、lexsort、partition、sorted几个排序的用法.

今天的文章python多列排序_用python中的numpy.lexsort()对矩阵按照某行(列)排序分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66332.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注