python二维数组按某行某列顺序、逆序排序

List
1、一维数组

2、二维数组

无论是一维数组还是二维数组都能通过 list 自带的 sort() 函数进行更新,或者直接调用sorted()方法即可。

import numpy as np
 
a = [3,4,5,1,2,3]
b = [[3,4,5],[2,3,4]]
c = [[3,4,5],[3,3,4]]
a.sort()   
b.sort()
c.sort()
print(a)     #直接调用sorted()方法,print(sorted(a)) 
print(b)
print(c)

Array
1、一维数组

1)argsort()

对一维数组进行排序可使用数组自带的a.argsort(),或者使用np.argsort(a)

>>>np.argsort(a) #按升序排列
>>> np.argsort(-a) #按降序排列

另一种降序排列的方法:                                                                                                                                                                    >>> a =

x[np.argsort(x)]
>>> a[::-1]
a = np.array([3,4,5,1,2,3])
print(a.argsort())     # 同np.argsort(a)


得到数组的排序索引 

根据索引,我们采用 a[a.argsort()]即可得到

 >>>a[np.argsort(x)] #通过索引值排序后的数组  

>>>a[np.argsort(-x)]
a = np.array([3,4,5,1,2,3])
print(a[a.argsort()])


2二维数组

1)argsort()

>>> x = np.array([[0, 3], [2, 2]])
>>> x
array([[0, 3],
[2, 2]])
>>> np.argsort(x, axis=0) #按列排序
array([[0, 1],
[1, 0]])

>>> np.argsort(x, axis=1) #按行排序
array([[0, 1],
[0, 1]])

2)lexsort()

lexsort支持对数组按指定行或列的顺序排序;是间接排序,lexsort不修改原数组,返回索引。

(对应lexsort 一维数组的是argsort a.argsort()这么使用就可以;argsort也不修改原数组, 返回索引)

>>> 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.T)]

array([[22, 12,  3,  2],

       [ 2,  7,  4,  2],

       [35,  9,  1,  5]])

按最后一行顺序排序

>>> a.T[np.lexsort(a)].T

array([[ 2,  4,  7,  2],

       [ 5,  1,  9, 35],

       [ 2,  3, 12, 22]])

按第一行顺序排序

>>> a.T[np.lexsort(a[::-1,:])].T

array([[ 2,  2,  4,  7],

       [ 5, 35,  1,  9],

       [ 2, 22,  3, 12]])


参考:https://blog.csdn.net/qq_20135597/article/details/84204903

猜你喜欢

转载自blog.csdn.net/u012135425/article/details/88172240