最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀Numpy中的排序(sort,argsort)

 更新時(shí)間:2023年06月14日 10:24:17   作者:EvanForEver  
這篇文章主要介紹了關(guān)于Numpy中的排序(sort,argsort),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Numpy中的排序(sort,argsort)

按索引排序

>>import numpy as np
>>x=np.array([[0,12,48],[4,14,18],[1,7,99]])
#靈活應(yīng)用索引和切片實(shí)現(xiàn)按索引的排序
#倒序的實(shí)現(xiàn)(普通列表也可用reverse實(shí)現(xiàn),numpy則沒(méi)有這個(gè)方法)
>>x[::-1]
array([[ 1,  7, 99],
       [ 4, 14, 18],
       [ 0, 12, 48]])
#指定順序的實(shí)現(xiàn)(傳入用于指定順序的整數(shù)列表或ndarray即可)
>>x[[2,0,1]]
array([[ 1,  7, 99],
       [ 0, 12, 48],
       [ 4, 14, 18]])
>>x[[2,0,1],[0,2,1]] #只是截取部分元素,并不符合排序要求
array([ 1, 48, 14])
>>x[[2,0,1]][:,[0,2,1]]
array([[ 1, 99,  7],
       [ 0, 48, 12],
       [ 4, 18, 14]])
>>x[np.ix_([2,0,1],[0,2,1])] #np.ix_函數(shù)將兩個(gè)一維數(shù)組轉(zhuǎn)化為用于選取方形區(qū)域的索引器
array([[ 1, 99,  7],
       [ 0, 48, 12],
       [ 4, 18, 14]])
 

按值大小排序

ndarray.sort(axis=-1, kind='quicksort', order=None)

或者:

ndarray.sort(axis=-1, kind='quicksort', order=None)
參數(shù)描述
axis排序沿?cái)?shù)組的(軸)方向,0表示按行,1表示按列,None表示展開(kāi)來(lái)排序,默認(rèn)值為-1,表示沿最后的軸排序
kind排序的算法,提供了快排'quicksort'、混排'mergesort'、堆排'heapsort', 默認(rèn)為‘quicksort'
order排序的字段名,可指定字段排序,默認(rèn)為None
>>import numpy as np
>>x=np.array([[0,12,48],[4,18,14],[7,1,99]])
>>np.sort(x)
array([[ 0, 12, 48],
       [ 4, 14, 18],
       [ 1,  7, 99]])
>>np.sort(x,axis=1)
array([[ 0, 12, 48],
       [ 4, 14, 18],
       [ 1,  7, 99]])
>>x.sort()
array([[ 0, 12, 48],
       [ 4, 14, 18],
       [ 1,  7, 99]])
>>dt = np.dtype([('name',  'S10'),('age',  int)]) 
>>a = np.array([("Mike",21),("Nancy",25),("Bob",  17),  ("Jane",27)], dtype = dt)
>>np.sort(a, order =  'name')
array([(b'Bob', 17), (b'Jane', 27), (b'Mike', 21), (b'Nancy', 25)],
      dtype=[('name', 'S10'), ('age', '<i4')])
>>np.sort(a, order =  'age')
array([(b'Bob', 17), (b'Mike', 21), (b'Nancy', 25), (b'Jane', 27)],
      dtype=[('name', 'S10'), ('age', '<i4')])
numpy.argsort(a, axis=-1, kind='quicksort', order=None)

對(duì)數(shù)組沿給定軸執(zhí)行間接排序,并使用指定排序類型返回?cái)?shù)據(jù)的索引數(shù)組。 這個(gè)索引數(shù)組用于構(gòu)造排序后的數(shù)組。

參數(shù)類似于sort(),不作說(shuō)明

>>import numpy as np
>>> x = np.array([3, 1, 2])
>>> a=np.argsort(x)
>>a #升序
#argsort函數(shù)返回的是數(shù)組值從小到大的索引值,[3, 1, 2]從小到大為[1,2,3],期對(duì)應(yīng)的索引為[1,2,0] 
array([1, 2, 0]) 
>>np.argsort(-x) #降序
array([0, 2, 1], dtype=int64)
>>x[a] #以排序后的順序重構(gòu)原數(shù)組
array([1, 2, 3])
#二維數(shù)組
>>x=np.array([[0,12,48],[4,18,14],[7,1,99]])
>>a1=np.argsort(x)
>>a1
array([[0, 1, 2],
       [0, 2, 1],
       [1, 0, 2]], dtype=int64)
#以排序后的順序重構(gòu)原數(shù)組,注意與一維數(shù)組的形式不一樣
>>np.array([np.take(x[i],x[i].argsort())for i in range(3)])
array([[ 0, 12, 48],
       [ 4, 14, 18],
       [ 1,  7, 99]])
>>x[x[:,2].argsort()] #按照第三列對(duì)行進(jìn)行排序
array([[ 4, 18, 14],
       [ 0, 12, 48],
       [ 7,  1, 99]])
>>x.T[x.T[:,2].argsort()].T #按照第三行對(duì)列進(jìn)行排序
array([[12,  0, 48],
       [18,  4, 14],
       [ 1,  7, 99]])
>>x[:,x[2].argsort()]  #還可以這樣寫
array([[12,  0, 48],
       [18,  4, 14],
       [ 1,  7, 99]])
 
lexsort(keys, axis=-1)

lexsort()根據(jù)鍵值的字典序進(jìn)行排序,支持對(duì)數(shù)組按指定行或列的順序排序,間接排序,不修改原數(shù)組,返回索引。一般對(duì)一維數(shù)組使用argsort()。

默認(rèn)按最后一行元素有小到大排序, 返回最后一行元素排序后索引所在位置。

參數(shù)描述
'axis'數(shù)組排序時(shí)的基準(zhǔn),axis=0,按行排列;axis=1,按列排列
'keys'排序的參照物包括數(shù)組或包含N維的的元組,默認(rèn)值為最后一行,(如果為二維數(shù)組則指最后一列)
>>import numpy as np 
>>x=np.array([[0,12,48],[4,18,14],[7,1,99]])
>>np.lexsort(x)
array([1, 0, 2], dtype=int64) #返回索引值
>>a=np.array([1,5,1,4,3,4,4])
>>b=np.array([9,4,0,4,0,2,1])
>>> ind=np.lexsort((b,a)) 
>>ind #將長(zhǎng)度相同的a,b組合,再根據(jù)a值的大小進(jìn)行排序,再考慮b值
array([2, 0, 4, 6, 5, 3, 1], dtype=int64) 
>>list(zip(a[ind],b[ind]))
[(1, 0), (1, 9), (3, 0), (4, 1), (4, 2), (4, 4), (5, 4)]
>>> c=[[1,5,1,4,3,4,4],[9,4,0,4,0,2,1]]
>>> np.lexsort(c) # 此種情況與先b后a的情況一致
array([2, 4, 6, 5, 3, 1, 0], dtype=int64)
#其他方法
#按最后一列順序排序
>>x[np.lexsort(x.T)]
array([[ 4, 18, 14],
       [ 0, 12, 48],
       [ 7,  1, 99]])
#按最后一列逆序排序
>>x[np.lexsort(-x.T)] 
array([[ 7,  1, 99],
       [ 0, 12, 48],
       [ 4, 18, 14]])
#按第一列順序排序
>>x[np.lexsort(x[:,::-1].T)]
array([[ 0, 12, 48],
       [ 4, 18, 14],
       [ 7,  1, 99]])
#按最后一行順序排序
>>x.T[np.lexsort(x)].T 
array([[12,  0, 48],
       [18,  4, 14],
       [ 1,  7, 99]])
#按第一行順序排序
>>x.T[np.lexsort(x[::-1,:])].T 
array([[ 0, 12, 48],
       [ 4, 18, 14],
       [ 7,  1, 99]])

numpy 數(shù)組排序np.sort()、np.argsort()

np.sort(a, axis=-1, kind=‘quicksort', order=None)

將指定軸上的每一個(gè)元素都按照從小到大的順序排列。

Params:

  • axis:默認(rèn)是-1,即最大維度,二維數(shù)組就是軸1,三維數(shù)組就是軸2。
  • kind:排序規(guī)則,有三個(gè)選項(xiàng),如下,使用默認(rèn)的就好
kindspeedworst casework spacestable
‘quicksort’1O(n^2)0no
‘mergesort’2O(n*log(n))~n/2yes
‘heapsort’3O(n*log(n))0no
  • order:指定排序的規(guī)則。

舉例:

arr = np.array([[7,3,9],
                [9,0,8]])
np.sort(arr,axis=0)
array([[7, 0, 8],
       [9, 3, 9]])

指定axis=0,把每一列按照從小到大排列。

np.sort(arr,axis=1)
array([[3, 7, 9],
       [0, 8, 9]])

指定axis=1,把每一行按照從小到大排列。

np.argsort(a, axis=-1, kind=‘quicksort', order=None)

返回的是數(shù)組值從小到大排序的索引值。就是把數(shù)組升序排序,然后看看各個(gè)元素在原來(lái)數(shù)組中的索引值,看看排在第一小的數(shù)在原來(lái)數(shù)組的哪個(gè)位置。形狀與傳入數(shù)組相同。

參數(shù)使用同上。

舉例:

這里我們舉一個(gè)簡(jiǎn)單的例子,萬(wàn)變不離其宗。

ind = np.argsort([4,3,5,6,0],axis=0)
ind
array([4, 1, 0, 2, 3], dtype=int64)

附圖解釋。每個(gè)數(shù)字排序時(shí),它的index也隨著數(shù)值走。最后返回其原來(lái)的index。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python更換國(guó)內(nèi)鏡像源三種實(shí)用方法

    python更換國(guó)內(nèi)鏡像源三種實(shí)用方法

    這篇文章主要給大家介紹了關(guān)于python更換國(guó)內(nèi)鏡像源三種實(shí)用方法的相關(guān)資料,更換Python鏡像源可以幫助解決使用pip安裝包時(shí)速度過(guò)慢或無(wú)法連接的問(wèn)題,需要的朋友可以參考下
    2023-09-09
  • Python如何用NumPy讀取和保存點(diǎn)云數(shù)據(jù)

    Python如何用NumPy讀取和保存點(diǎn)云數(shù)據(jù)

    這篇文章主要介紹了Python如何用NumPy讀取和保存點(diǎn)云數(shù)據(jù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 基于Python打造一個(gè)WiFi命令行安全審計(jì)工具

    基于Python打造一個(gè)WiFi命令行安全審計(jì)工具

    在當(dāng)今數(shù)字化時(shí)代,無(wú)線WiFi網(wǎng)絡(luò)已成為日常生活中不可或缺的基礎(chǔ)設(shè)施,本文將基于Python pywifi庫(kù)開(kāi)發(fā)專業(yè)級(jí)無(wú)線安全評(píng)估工具,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-03-03
  • 使用Python開(kāi)發(fā)Telegram?Bot的流程步驟

    使用Python開(kāi)發(fā)Telegram?Bot的流程步驟

    Telegram?Bot?是一種可以與用戶交互的機(jī)器人應(yīng)用程序,通過(guò)?Telegram?的?Bot?API?與服務(wù)器通信,它可以用來(lái)處理消息、執(zhí)行命令、提供服務(wù),如通知提醒、數(shù)據(jù)查詢和自動(dòng)化任務(wù)等,本文給大家介紹了如何用?Python?開(kāi)發(fā)一個(gè)?Telegram?Bot,需要的朋友可以參考下
    2025-01-01
  • 選擇Python寫網(wǎng)絡(luò)爬蟲(chóng)的優(yōu)勢(shì)和理由

    選擇Python寫網(wǎng)絡(luò)爬蟲(chóng)的優(yōu)勢(shì)和理由

    在本篇文章里小編給各位整理了一篇關(guān)于選擇Python寫網(wǎng)絡(luò)爬蟲(chóng)的優(yōu)勢(shì)和理由以及相關(guān)代碼實(shí)例,有興趣的朋友們閱讀下吧。
    2019-07-07
  • selenium + python 獲取table數(shù)據(jù)的示例講解

    selenium + python 獲取table數(shù)據(jù)的示例講解

    今天小編就為大家分享一篇selenium + python 獲取table數(shù)據(jù)的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • python每5分鐘從kafka中提取數(shù)據(jù)的例子

    python每5分鐘從kafka中提取數(shù)據(jù)的例子

    今天小編就為大家分享一篇python每5分鐘從kafka中提取數(shù)據(jù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python中將JSON數(shù)據(jù)寫入文件的實(shí)現(xiàn)方法

    Python中將JSON數(shù)據(jù)寫入文件的實(shí)現(xiàn)方法

    在Python開(kāi)發(fā)中,JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,常用于前后端數(shù)據(jù)交互、配置文件存儲(chǔ)等場(chǎng)景,當(dāng)我們需要將Python中的字典或列表等數(shù)據(jù)以JSON格式保存到文件時(shí),就需要掌握如何將JSON數(shù)據(jù)寫入文件的方法,所以本文給大家介紹了Python中將JSON數(shù)據(jù)寫入文件的實(shí)現(xiàn)方法
    2025-06-06
  • python實(shí)現(xiàn)圖片批量壓縮程序

    python實(shí)現(xiàn)圖片批量壓縮程序

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖片批量壓縮程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 基于Python開(kāi)發(fā)一個(gè)小說(shuō)圖片PDF生成器

    基于Python開(kāi)發(fā)一個(gè)小說(shuō)圖片PDF生成器

    本項(xiàng)目是一個(gè)基于 wxPython 開(kāi)發(fā)的桌面應(yīng)用程序,用于將圖片和文字描述組合生成精美的 PDF 小說(shuō),它解決了創(chuàng)作者需要將圖文內(nèi)容快速整理成電子書的需求,特別適合繪本、圖文小說(shuō)、攝影作品集等場(chǎng)景,需要的朋友可以參考下
    2025-10-10

最新評(píng)論

桦甸市| 浑源县| 忻城县| 衡山县| 朝阳县| 峨眉山市| 仁化县| 玉环县| 临洮县| 禹城市| 泰来县| 济阳县| 嘉峪关市| 高密市| 辉南县| 筠连县| 晋宁县| 铜陵市| 海阳市| 仁化县| 中西区| 江都市| 乌海市| 邛崃市| 漳州市| 奎屯市| 深州市| 金湖县| 喜德县| 万载县| 日照市| 东丰县| 安丘市| 安阳市| 石棉县| 平凉市| 沙田区| 威信县| 嘉定区| 辽阳市| 赤城县|