numpy多級排序lexsort函數(shù)的使用
1、lexsort() 排的是個啥
lexsort() 函數(shù)的定義如下:
def lexsort(keys, axis=None)
lexsort是一種多級排序方法。作用為對給定的 keys 中的最后一個 key 排序,每一個 key 都被認(rèn)為是列向量,其他 keys 用來輔助最后一個 key 進行排序。最后返回最后一個 key 進行排序的索引。
哈哈哈是不是沒看懂上面的解釋?莫慌莫慌,我給舉個簡單的例子保證秒懂,可以回想這樣一個場景:
對一堆學(xué)生的成績進行排名,則排名結(jié)果就是按照總成績從低到高排序,這個還沒排序的總成績表就是上述說的最后一個 key ,排序后的索引就是上述的返回值。
比如初始總成績數(shù)組為:[99, 100, 98, 95, 80] ,這就是 最后一個 key,升序排序后的數(shù)組為:[80, 95, 98, 99, 100],對應(yīng)的索引為:[4, 3, 2, 0, 1],這個索引數(shù)組就是 lexsort 函數(shù)的返回值。
但是如果兩個人的總成績一樣怎么進一步排序呢?這時可以按照語文成績的升序進行排序,如果語文成績還一樣呢?那再看數(shù)學(xué)成績,如果數(shù)學(xué)還一樣呢?再查英語成績,如果還。。。(沒了沒了,再相同我就要懷疑這倆人作弊了?。┻@里的 語文成績、數(shù)學(xué)成績、英語成績 就是最后一個 key 前面的 keys,記得是從后往前數(shù)的。也就是最后一個 key 相同,就看倒數(shù)第二個 key,倒數(shù)第二個相同就看倒數(shù)第三個 key。
2、舉個例子
默認(rèn)你已經(jīng)理解了,那就舉一個例子來過一遍:
import numpy as np a = [[3, 3, 8], [6, 9, 7], [3, 3, 2]] b = np.array(a) # 轉(zhuǎn)換為 numpy 數(shù)組 """ index = np.lexsort((b[:, 2], b[:, 1], b[:, 0])) 的運行情況: step-1、首先按照第一列 b[:, 0] 的數(shù)值 [3, 6, 3] 升序順序?qū)γ啃械奈恢眠M行重排, 第一行有兩個值相同, 轉(zhuǎn)到step-2 [[3, 3, 8], [[3, 3, 8], [6, 9, 7], --> [3, 3, 2], [3, 3, 2]] [6, 9, 7]] step-2、第一列數(shù)值相同的情況下按照相應(yīng)位置第二列 b[:, 1] 的值繼續(xù)排序, 第二列對應(yīng)位置任然相同, 轉(zhuǎn)到step-3 [[3, 3, 8], [[3, 3, 8], [6, 9, 7], --> [3, 3, 2], [3, 3, 2]] [6, 9, 7]] step-3、第二列數(shù)值相同的情況下按照相應(yīng)位置第三列 b[:, 2] 的值繼續(xù)排序 [[3, 3, 8], [[3, 3, 2], [6, 9, 7], --> [3, 3, 8], [3, 3, 2]] [6, 9, 7]] 總結(jié): 第一列的排序結(jié)果為[3, 3, 6] 對應(yīng)的索引值為 [2, 0, 1] """ index = np.lexsort((b[:, 2], b[:, 1], b[:, 0])) print(index) # 輸出結(jié)果: [2 0 1] ans = b[index] # 按照排序結(jié)果重置數(shù)組元素的位置 print(ans) # ans 的結(jié)果: [[3 3 2] [3 3 8] [6 9 7]]
如果直接對矩陣進行排序呢?
""" 相當(dāng)于拆解為 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) # 輸出結(jié)果: [2 0 1]
即,當(dāng)輸入是一個矩陣時,默認(rèn)排序最后一行的數(shù)據(jù),前面的行都是輔助行。
到此這篇關(guān)于numpy多級排序lexsort函數(shù)的使用的文章就介紹到這了,更多相關(guān)numpy lexsort函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows 8.1 64bit下搭建 Scrapy 0.22 環(huán)境
這篇文章主要介紹了Windows 8.1 64bit下搭建 Scrapy 0.22 環(huán)境,需要的朋友可以參考下2018-11-11Python數(shù)據(jù)清洗&預(yù)處理入門教程
凡事預(yù)則立,不預(yù)則廢,訓(xùn)練機器學(xué)習(xí)模型也是如此。數(shù)據(jù)清洗和預(yù)處理是模型訓(xùn)練之前的必要過程,否則模型可能就廢了。本文是一個初學(xué)者指南,將帶你領(lǐng)略如何在任意的數(shù)據(jù)集上,針對任意一個機器學(xué)習(xí)模型,完成數(shù)據(jù)預(yù)處理工作2022-10-10Python導(dǎo)入引用其他文件的函數(shù)實戰(zhàn)案例(推薦!)
這篇文章主要給大家介紹了關(guān)于Python導(dǎo)入引用其他文件的函數(shù)的相關(guān)資料,文中通過代碼以及圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01Python編程實現(xiàn)控制cmd命令行顯示顏色的方法示例
這篇文章主要介紹了Python編程實現(xiàn)控制cmd命令行顯示顏色的方法,結(jié)合實例形式分析了Python針對命令行字符串顯示顏色屬性相關(guān)操作技巧,需要的朋友可以參考下2017-08-08