亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法弄清楚如何使用 argsort 在一個數組上創建索引并使用它對另一個數組進行排序

無法弄清楚如何使用 argsort 在一個數組上創建索引并使用它對另一個數組進行排序

一只萌萌小番薯 2023-04-18 15:00:32
我有一個數組ranks,我想按列排序。我想使用那種索引來重新排列具有相同維度的數組,稱為unsorted. 然后我想選擇未排序的前 2 行。這是我到目前為止不起作用的示例:import numpy as npranks = np.random.uniform(0,1,(10,5))unsorted = np.random.uniform(0,1,(10,5))ind = np.argsort(ranks,axis = 1)sorted = unsorted[ind]sorted = sorted[0:2,:]速度也是一個問題,因為它將應用于大型陣列 (50,000 x 5,000)。
查看完整描述

1 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

首先確保我們知道如何argsort申請ranks:


In [222]: ranks = np.random.randint(0,10,(4,5)) 

     ...: unsorted = np.random.randint(0,10,(4,5)) 

     ...:  

     ...: ind = np.argsort(ranks,axis = 1)                                                           

In [223]: ranks                                                                                      

Out[223]: 

array([[5, 9, 4, 8, 6],

       [8, 6, 7, 3, 1],

       [1, 2, 3, 4, 8],

       [6, 0, 0, 5, 0]])

In [224]: ind                                                                                        

Out[224]: 

array([[2, 0, 4, 3, 1],

       [4, 3, 1, 2, 0],

       [0, 1, 2, 3, 4],

       [1, 2, 4, 3, 0]])

In [225]: np.take_along_axis(ranks, ind, axis=1)                                                     

Out[225]: 

array([[4, 5, 6, 8, 9],

       [1, 3, 6, 7, 8],

       [1, 2, 3, 4, 8],

       [0, 0, 0, 5, 6]])

這里每一行都是有序的。


pre-take_along 方法(仍然可以正常工作)是:


In [226]: ranks[np.arange(4)[:,None], ind]                                                           

Out[226]: 

array([[4, 5, 6, 8, 9],

       [1, 3, 6, 7, 8],

       [1, 2, 3, 4, 8],

       [0, 0, 0, 5, 6]])

顯然我們可以將其應用于unsorted,盡管我知道您所說的 top 是什么意思two rows。two rows[226]是什么?


對二維數組進行排序很棘手;很難想象正在發生的事情。我更改了您的示例以使用整數和小形狀來更好地可視化操作。


unsorted[ind]是不正確的。 ind在本例中,值為 0...4,即列數。它不能用于索引第一個維度(行)。在我的簡化示例中,4 太大了。您的示例運行,但形狀為 off (10,5,5)。


查看完整回答
反對 回復 2023-04-18
  • 1 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號