您好,登錄后才能下訂單哦!
本篇內容主要講解“numpy多級排序lexsort函數如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“numpy多級排序lexsort函數如何使用”吧!
lexsort() 函數的定義如下:
def lexsort(keys, axis=None)
lexsort是一種多級排序方法。作用為對給定的 keys 中的最后一個 key 排序,每一個 key 都被認為是列向量,其他 keys 用來輔助最后一個 key 進行排序。最后返回最后一個 key 進行排序的索引。
哈哈哈是不是沒看懂上面的解釋?莫慌莫慌,我給舉個簡單的例子保證秒懂,可以回想這樣一個場景:
對一堆學生的成績進行排名,則排名結果就是按照總成績從低到高排序,這個還沒排序的總成績表就是上述說的最后一個 key ,排序后的索引就是上述的返回值。
比如初始總成績數組為:[99, 100, 98, 95, 80] ,這就是 最后一個 key,升序排序后的數組為:[80, 95, 98, 99, 100],對應的索引為:[4, 3, 2, 0, 1],這個索引數組就是 lexsort 函數的返回值。
但是如果兩個人的總成績一樣怎么進一步排序呢?這時可以按照語文成績的升序進行排序,如果語文成績還一樣呢?那再看數學成績,如果數學還一樣呢?再查英語成績,如果還。。。(沒了沒了,再相同我就要懷疑這倆人作弊了!)這里的 語文成績、數學成績、英語成績 就是最后一個 key 前面的 keys,記得是從后往前數的。也就是最后一個 key 相同,就看倒數第二個 key,倒數第二個相同就看倒數第三個 key。
默認你已經理解了,那就舉一個例子來過一遍:
import numpy as np a = [[3, 3, 8], [6, 9, 7], [3, 3, 2]] b = np.array(a) # 轉換為 numpy 數組 """ index = np.lexsort((b[:, 2], b[:, 1], b[:, 0])) 的運行情況: step-1、首先按照第一列 b[:, 0] 的數值 [3, 6, 3] 升序順序對每行的位置進行重排, 第一行有兩個值相同, 轉到step-2 [[3, 3, 8], [[3, 3, 8], [6, 9, 7], --> [3, 3, 2], [3, 3, 2]] [6, 9, 7]] step-2、第一列數值相同的情況下按照相應位置第二列 b[:, 1] 的值繼續排序, 第二列對應位置任然相同, 轉到step-3 [[3, 3, 8], [[3, 3, 8], [6, 9, 7], --> [3, 3, 2], [3, 3, 2]] [6, 9, 7]] step-3、第二列數值相同的情況下按照相應位置第三列 b[:, 2] 的值繼續排序 [[3, 3, 8], [[3, 3, 2], [6, 9, 7], --> [3, 3, 8], [3, 3, 2]] [6, 9, 7]] 總結: 第一列的排序結果為[3, 3, 6] 對應的索引值為 [2, 0, 1] """ index = np.lexsort((b[:, 2], b[:, 1], b[:, 0])) print(index) # 輸出結果: [2 0 1] ans = b[index] # 按照排序結果重置數組元素的位置 print(ans) # ans 的結果: [[3 3 2] [3 3 8] [6 9 7]]
如果直接對矩陣進行排序呢?
""" 相當于拆解為 key1 = b[0,:] key2 = b[1,:] key3 = b[2,:] # 最后一行為主排序序列 index = np.lexsort(b) 等效為: index = np.lexsort((b[0,:], b[1,:], b[2,:])) """ index = np.lexsort(b) print(index) # 輸出結果: [2 0 1]
即,當輸入是一個矩陣時,默認排序最后一行的數據,前面的行都是輔助行。
到此,相信大家對“numpy多級排序lexsort函數如何使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。