2017-01-12 103 views
-3

第一個輸出是正確的。但不知何故,argsort給出了第二陣列輸出錯誤:Numpy argsort奇怪的索引

>>> np.argsort(np.array([ 0.62678927, 0.36816272, 0.31044763, 0.44873312, 0.3101446 ])) 
array([4, 2, 1, 3, 0]) 

>>> np.argsort(np.array([ 0.36816272, 0.62678927, 0.13509969, 0.54590815, 0.13493432])) 
array([4, 2, 0, 3, 1]) 

在花費2小時後,我相信,這個問題是不是太微不足道或過於技術。 我使用蟒蛇虛擬環境,並與numpy的1.11.3和1.10.4

+1

究竟是什麼問題?輸出正確爲0.13493432 <0.13509969 <0.36816272 <0.54590815 <0.62678927。 – fuglede

+0

但結果似乎是正確的,你期望什麼? – MSeifert

+0

感謝您的回覆。但我期待第二個命令返回'[2,4,1,3,0]'。由於0.6是最大的,它應該有一個與其相關的數字「4」。我錯過了什麼? – govind

回答

0

它看起來像你的印象是np.argsort(x)返回一個數組,使得np.argsort(x)[i]就是x[i]進去有序下進行了測試。這不是它的工作原理。

np.argsort(x)返回一個數組,使得x[np.argsort(x)[i]]以排序順序排列在位置i。這將產生

x[np.argsort(x)] 

等同的效果

np.sort(x) 

這正好產生相同的結果如你預期的第一陣列的行爲,而不是第二。