11 数组排序

8 阅读2分钟

NumPy 提供了不少数组排序的方式,可以针对多维数组与大量数据进行高效率的排序

数组排序方式

NumPy 有下列几种数组排序的方法:

方法参数说明
numpy.sort()arr将数组里面的内容从小到大排序,产生新的数组
numpy.argsort()arr将数组从小到大排序后,返回内容为【索引值】的数组
numpy.lexsort()arr1, arr2将两个长度相同的数组相互对照排序,返回内容为【索引值】的数组
numpy.argmax()、numpy.argmin()arr返回最大值或者最小值的【索引值】

numpy.sort()

numpy.sort() 会将数组的内容从小到大排序,产生新的数组

import numpy as np
a = np.array([5,3,4,2,1,6,7,9,8])
b = np.sort(a)
print(b)    # [1 2 3 4 5 6 7 8 9]

二维数组排序

import numpy as np

arr = [
  [2,3],
  [5,2],
  [3,1]
]
a = np.array(arr)
# 针对最后一轴排序 ( -1,二维数组就是 1 ),所以只会排列 2 和 3、5 和 2、3 和 1
b = np.sort(a)   
print(b)
'''
[[2 3]
 [2 5]
 [1 3]]
'''
c = np.sort(a, axis=None)   # axis 设定 None 会打散并排序为一维数组
print(c)                    # [1 2 2 3 3 5]
d = np.sort(a,axis=0)       # 针对垂直维度 ( 0 轴 ) 由小到大排序,所有元素从小到大
print(d)
'''
[[2 1]
 [3 2]
 [5 3]]
'''
e = np.sort(a,axis=1)       # 因为是二维数组,axis 设定 1 等同 np.sort(a)
print(e)
'''
[[2 3]
 [2 5]
 [1 3]]
'''

numpy.argsort()

numpy.argsort() 会将数组从小到大排序后,返回内容为【索引值】的数组

import numpy as np

arr = [
  [2,3,7],
  [5,2,6],
  [3,1,2]
]
a = np.array(arr)
b = np.argsort(a)
print(b)
'''
[[0 1 2]       # 对应 2,3,7
 [1 0 2]       # 对应 2,5,6
 [1 2 0]]      # 对应 1,2,3
'''

numpy.lexsort()

numpy.lexsort()会将两个长度相同的数组互相对照排序,返回的内容为【索引值】的数组,举例来说,有 a 和 b 两个数组,当 a 从大到小排序后,b 会按照 a 的排列顺序,将自身的元素进行排序。

import numpy as np

a = np.array([1,2,3,4,5,6,7,8])
b = np.array(['e','d','a','c','g','h','f','b'])
c = np.lexsort((a,b))    # b 先排序,然後 a 按照 b 的順序排序后返回索引值
d = np.lexsort((b,a))    # a 先排序,然後 b 按照 a 的順序排序后返回索引值
print(c)    # [2 7 3 1 0 6 4 5]   對應 3 8 4 2 1 7 5 6
print(d)    # [0 1 2 3 4 5 6 7]

numpy.argmax()、numpy.argmin()

numpy.argmax()、numpy.argmin() 会返回最大值或最小值的【索引值】

import numpy as np

a = np.array([1,2,3,4,5,6,7,8])
b = np.argmax(a)
c = np.argmin(a)
print(b)    # 7   对应 8
print(c)    # 0   对应 1