在Python中,我們經常需要對數據進行排序。而當需要按照多個條件排序時,就需要使用多重排序函數。其中,lexsort()
是一種非常常用的多重排序函數。本文將詳細介紹lexsort()
的使用方法。
一、準備待排序數據
首先,我們需要準備待排序的數據。為了方便起見,本文以一個學生列表的成績作為示例:
>>> import numpy as np
>>> data = np.array([['Tom', 70, 80, 90], ['John', 80, 90, 70], ['Lucy', 90, 80, 85], ['Lily', 80, 85, 80]])
以上代碼定義了一個numpy
數組data
,其中包含四個學生的姓名及其三門成績。
二、使用lexsort()函數進行排序
接下來,我們將使用lexsort()
函數按照以下規則對data
進行排序:
- 首先按照第四列成績從小到大排序;
- 對於第四列成績相同的學生,按照第三列成績從小到大排序;
- 對於第三列成績也相同的學生,按照第二列成績從小到大排序;
- 對於前三列成績都相同的學生,按照姓名從小到大排序。
代碼如下:
>>> ind = np.lexsort((data[:,0], -1*data[:,1], -1*data[:,2], -1*data[:,3]))
>>> sorted_data = data[ind]
>>> print(sorted_data)
[['John' '80' '90' '70']
['Lily' '80' '85' '80']
['Lucy' '90' '80' '85']
['Tom' '70' '80' '90']]
以上代碼中,ind
指定了排序後每個元素在原數組中的下標順序,sorted_data
則是按照指定的排序規則排好序的數組。
三、使用其他排序函數
numpy
還提供了其他很多排序函數,比如sort()
、argsort()
等。下面我們簡單介紹一下這些函數的使用方法。
1. sort()函數
sort()
函數用於對數組按照指定的維度進行排序。下面是一個示例:
>>> import numpy as np
>>> data = np.array([[70, 80, 90], [80, 90, 70], [90, 80, 85], [80, 85, 80]])
>>> sorted_data = np.sort(data, axis=0) # 按照第0軸排序(即按照列排序)
>>> print(sorted_data)
[[70 80 70]
[80 85 80]
[80 90 85]
[90 90 90]]
以上代碼中,通過設置axis
參數,我們指定按照第0軸進行排序,也就是按照列進行排序。
2. argsort()函數
argsort()
函數用於返回數組元素按照指定的維度排序後的下標。下面是一個示例:
>>> import numpy as np
>>> data = np.array([[70, 80, 90], [80, 90, 70], [90, 80, 85], [80, 85, 80]])
>>> ind = np.argsort(data[:,0]) # 按照第0列排序並返回排序後的下標
>>> print(ind)
[0 1 3 2]
>>> print(data[ind])
[[70 80 90]
[80 90 70]
[80 85 80]
[90 80 85]]
以上代碼中,ind
是按照第0列排序後的下標順序,通過data[ind]
即可獲取排序後的二維數組。
四、總結
lexsort()
函數是一種常用的多重排序函數,通過本文的介紹,我們學習了如何使用lexsort()
函數對多維數組進行排序,也了解了其他幾個排序函數的使用方法。
原創文章,作者:ATENI,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/368197.html