2015-04-19 185 views
6

我有一個二維numpy數組,我想創建一個新的一維數組,其中它是第一個數組中的數字索引,如果它們按升序排序。對於下面的數組:Python numpy保留排序的二維數組的索引列表

A = [[1,0,2], 
    [0,3,0]] 

我想這是這樣的:

B = [[1,1],[0,2],[0,0],[0,1],[1,0],[1,2]] 

任何想法如何可以在使用預定義功能蟒蛇做什麼?

感謝

回答

7

您可以使用argsort到平面數組的索引,然後unravel_index排序,扁平索引轉換回座標:

>>> i = (-a).argsort(axis=None, kind='mergesort') 
>>> j = np.unravel_index(i, a.shape) 
>>> np.vstack(j).T 
array([[1, 1], 
     [0, 2], 
     [0, 0], 
     [0, 1], 
     [1, 0], 
     [1, 2]]) 

-akind='mergesort'是爲了數組排序在穩定方式降序(以匹配您正在尋找的輸出)。

如果你不關心有一個穩定的排序,以取代第一行:

>>> i = a.argsort(axis=None)[::-1] 
+1

尖端有關使用'np.unravel_index'是輝煌!我很高興學習這種方法。 –

+0

「穩定排序」是什麼意思?這是否對相同的值產生一致的排序? –

+1

@ stvn66我相信這確實會對相同的值產生一致的排序,這相當於穩定排序 – ahajib