Python中的numpy lexsort用法问题

我看网上写的
import numpy as np

a
array([[ 2, 7, 4, 2],
[35, 9, 1, 5],
[22, 12, 3, 2]])

按最后一列顺序排序

a[np.lexsort(a.T)]
array([[22, 12, 3, 2],
[ 2, 7, 4, 2],
[35, 9, 1, 5]])

按最后一列逆序排序

a[np.lexsort(-a.T)]
array([[35, 9, 1, 5],
[ 2, 7, 4, 2],
[22, 12, 3, 2]])

按第一列顺序排序

a[np.lexsort(a[:,::-1].T)]
array([[ 2, 7, 4, 2],
[22, 12, 3, 2],
[35, 9, 1, 5]])

我想问下a[:,::-1].T这个代表啥意思?
比如我现在有一个10X8的数组,我现在要用第六列升序排序,该如何写代码?
a[:,::-1]是对列从后往前,行不变。T是数组转置
两者联合起来用,比如
2, 7, 4, 2
35, 9, 1, 5
22, 12, 3, 2
->
2,4,7,2
5,1,9,35
2,3,12,22
再转置
2,5,2
4,1,3
7,9,12
2,35,22
(0,1,2)这是原始的下标
lexsort默认按最后一行元素有小到大排序
所以
上面2,35,22排序成
2,22,35
也就是
(0,2,1)
最后a[这个下标]
2, 7, 4, 2 --- a[0]
22, 12, 3, 2 --- a[2]
35, 9, 1, 5 ---a[1]
所以就完成排序

按照第六列升序排序代码如下:
import numpy as np
a=np.array([[ 2, 7, 4, 2, 8, 9, 15],
            [35, 9, 1, 5, 1, 8, 3],
            [22, 12, 3, 2, 1, 2, 14],
            [3, 0, 5, 3, 11, 7, 6],
            [7, 12, 9, 4, 5, 11, 13]])
print(a[:,:6:].T)
print(np.lexsort(a[:,:6:].T))
print(a[np.lexsort(a[:,:6:].T)])
结果:(注意看中间的输出,让你更好理解)
[[ 2 35 22  3  7]
 [ 7  9 12  0 12]
 [ 4  1  3  5  9]
 [ 2  5  2  3  4]
 [ 8  1  1 11  5]
 [ 9  8  2  7 11]]
[2 3 1 0 4]
[[22 12  3  2  1  2 14]
 [ 3  0  5  3 11  7  6]
 [35  9  1  5  1  8  3]
 [ 2  7  4  2  8  9 15]
 [ 7 12  9  4  5 11 13]]

进一步学习,可以阅读文档:https://het.as.utexas.edu/HET/Software/Numpy/reference/generated/numpy.lexsort.html

问题解决的话,请点下采纳