numpy中np.sort返回索引的具體使用
一、np.sort函數(shù)返回索引的基本語法
numpy中的np.sort函數(shù)可以將數(shù)組按照從小到大的順序進行排序,并且可以通過指定axis參數(shù)指定排序的維度,如果指定axis=None,則會將整個數(shù)組展平后排序。這里我們主要討論np.sort函數(shù)的返回值,也就是返回的排序后元素的原下標,返回的類型是ndarray,數(shù)據(jù)類型是int。
import numpy as np a = np.array([3, 1, 2]) print(np.sort(a)) ? ? ? ? ? # 輸出 [1, 2, 3] print(np.argsort(a)) ? ? ? ?# 輸出 [1, 2, 0] print(a[np.argsort(a)]) ? ?# 輸出 [1, 2, 3]
在上面的例子中,我們定義了一個一維數(shù)組a = [3, 1, 2]。通過np.sort函數(shù)對a進行排序,輸出的結果是[1, 2, 3]。通過調(diào)用np.argsort函數(shù),我們可以得到排序后的每個元素對應的原下標,即[1, 2, 0]。這個數(shù)組的意義是第一個元素1在原數(shù)組中的下標是1,第二個元素2在原數(shù)組中的下標是2,第三個元素3在原數(shù)組中的下標是0。接著我們通過數(shù)組下標操作,可以得到排好序的數(shù)組a。
二、np.sort函數(shù)返回索引的特殊用法
在有些情況下,我們需要按照某個方向的順序?qū)Χ嗑S數(shù)組進行排序,比如對一個2維數(shù)組按照每行的最大值排序。這時候我們可以通過指定axis參數(shù)來控制排序維度。但是np.sort函數(shù)返回的是經(jīng)過展平后的下標數(shù)組,我們需要重新構造原數(shù)組。
import numpy as np a = np.array([[3, 1], [2, 0]]) print(np.argsort(a, axis=1)) ? ?# 輸出 [[1, 0], [1, 0]] print(np.unravel_index(np.argsort(a, axis=None), a.shape)) ? ?# 輸出 (array([1, 0, 0, 1]), array([0, 1, 0, 1])) print(a[np.unravel_index(np.argsort(a, axis=None), a.shape)]) ? ?# 輸出 [0, 1, 2, 3] # 對每行進行排序 print(a[np.arange(a.shape[0])[:, None], np.argsort(a, axis=1)]) # 輸出 [[1 3] # ? ? ?[0 2]]
在上面的例子中,我們定義了一個2維數(shù)組a = [[3, 1], [2, 0]]。通過np.argsort函數(shù)指定axis=1,表示按照行的方向進行排序,輸出的結果是[[1, 0], [1, 0]]。我們需要使用np.unravel_index函數(shù)把一維的下標數(shù)組轉(zhuǎn)化成原數(shù)組的下標形式,即輸出(重復兩遍是因為a是2維的):(array([1, 0, 0, 1]), array([0, 1, 0, 1]))。接著我們通過數(shù)組下標操作,可以得到排好序的數(shù)組a,輸出[0, 1, 2, 3]。這個數(shù)組的意義是原數(shù)組的第二行第一個元素,在排好序后的數(shù)組中的位置是0,以此類推。
最后我們可以使用切片和numpy的廣播技巧,對每一行進行排序,輸出的結果是[[1, 3], [0, 2]],也就是每一行排好序的新數(shù)組。
三、避免在函數(shù)參數(shù)中使用np.sort函數(shù)返回索引
在使用np.sort函數(shù)返回索引時,有時候我們會在一些函數(shù)中作為參數(shù)傳遞,很容易出現(xiàn)錯誤和難以調(diào)試。這個時候我們可以使用np.take_along_axis函數(shù)來代替這個過程。
import numpy as np a = np.array([[3, 1], [2, 0]]) print(np.sort(a, axis=1)) ? ? ?# 經(jīng)過排序后的數(shù)組 print(np.take_along_axis(a, np.argsort(a, axis=1), axis=1)) ? ?# 與上面相同的結果
在上面的例子中,我們有一個2維數(shù)組a = [[3, 1], [2, 0]],通過np.argsort函數(shù)指定axis=1,表示按照行的方向進行排序。我們先輸出經(jīng)過排序后的數(shù)組。接下來我們使用np.take_along_axis函數(shù),第一個參數(shù)是原數(shù)組a,第二個參數(shù)是經(jīng)過排序后的下標數(shù)組。這個函數(shù)會返回按照排序后的下標數(shù)組重新構造的數(shù)組。
四、總結
本文主要介紹了使用numpy中np.sort函數(shù)返回索引的詳細解釋和使用方法,包括基本語法、特殊用法以及避免在函數(shù)參數(shù)中使用np.sort函數(shù)返回索引。使用np.sort函數(shù)返回的下標數(shù)組在多維數(shù)組排序時特別有用,需要特別注意在使用過程中的問題和陷阱。
到此這篇關于numpy中np.sort返回索引的具體使用的文章就介紹到這了,更多相關numpy np.sort返回索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
selenium+python實現(xiàn)文件上傳操作的方法實例
文件上傳功能是我們在日常開發(fā)中經(jīng)常會遇到的一個需求,下面這篇文章主要給大家介紹了關于selenium+python實現(xiàn)文件上傳操作的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-08-08
淺析python實現(xiàn)動態(tài)規(guī)劃背包問題
這篇文章主要介紹了python實現(xiàn)動態(tài)規(guī)劃背包問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
全網(wǎng)最細 Python 格式化輸出用法講解(推薦)
這篇文章主要介紹了全網(wǎng)最細 Python 格式化輸出用法講解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Django2.1集成xadmin管理后臺所遇到的錯誤集錦(填坑)
這篇文章主要介紹了Django2.1集成xadmin管理后臺所遇到的錯誤集錦(填坑),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12

