91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

numpy多級排序lexsort函數如何使用

發布時間:2023-05-10 17:29:29 來源:億速云 閱讀:149 作者:iii 欄目:開發技術

本篇內容主要講解“numpy多級排序lexsort函數如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“numpy多級排序lexsort函數如何使用”吧!

1、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。

2、舉個例子

默認你已經理解了,那就舉一個例子來過一遍:

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函數如何使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳东县| 彭山县| 奉新县| 嘉禾县| 西乌珠穆沁旗| 农安县| 襄垣县| 突泉县| 竹北市| 铜梁县| 台州市| 洛扎县| 万全县| 遂昌县| 临澧县| 西充县| 顺平县| 旌德县| 平顶山市| 伊宁县| 海伦市| 义乌市| 旺苍县| 板桥市| 安宁市| 沙坪坝区| 子长县| 大荔县| 焦作市| 枣强县| 两当县| 南川市| 宣城市| 山西省| 新丰县| 浮山县| 旬阳县| 栖霞市| 磴口县| 阳谷县| 长阳|