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