6
我有一個二維numpy數組,我想創建一個新的一維數組,其中它是第一個數組中的數字索引,如果它們按升序排序。對於下面的數組:Python numpy保留排序的二維數組的索引列表
A = [[1,0,2],
[0,3,0]]
我想這是這樣的:
B = [[1,1],[0,2],[0,0],[0,1],[1,0],[1,2]]
任何想法如何可以在使用預定義功能蟒蛇做什麼?
感謝
我有一個二維numpy數組,我想創建一個新的一維數組,其中它是第一個數組中的數字索引,如果它們按升序排序。對於下面的數組:Python numpy保留排序的二維數組的索引列表
A = [[1,0,2],
[0,3,0]]
我想這是這樣的:
B = [[1,1],[0,2],[0,0],[0,1],[1,0],[1,2]]
任何想法如何可以在使用預定義功能蟒蛇做什麼?
感謝
您可以使用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]])
-a
和kind='mergesort'
是爲了數組排序在穩定方式降序(以匹配您正在尋找的輸出)。
如果你不關心有一個穩定的排序,以取代第一行:
>>> i = a.argsort(axis=None)[::-1]
尖端有關使用'np.unravel_index'是輝煌!我很高興學習這種方法。 –
「穩定排序」是什麼意思?這是否對相同的值產生一致的排序? –
@ stvn66我相信這確實會對相同的值產生一致的排序,這相當於穩定排序 – ahajib