np.argsort(A)
の各行をA
別々にソートしています。例えば、
In [21]: np.argsort([[6,5,4],[3,2,1]])
Out[21]:
array([[2, 1, 0],
[2, 1, 0]])
代わりに、配列を値の 1 次元配列にフラット化し、それを argsort します。これは、axis
パラメーターを次のように設定することで実行できますNone
(これを指摘してくれた @Akavall に感謝します)。
In [23]: np.argsort(A, axis=None)
Out[23]: array([3, 0, 1, 2])
次に、np.unravel_indexを使用して、関連付けられているインデックスを で復元しA
ます。
In [14]: import numpy as np
In [15]: A = np.array([[7, 8], [9, 5]])
In [4]: np.column_stack(np.unravel_index(np.argsort(A, axis=None)[::-1], A.shape))
Out[4]:
array([[1, 0],
[0, 1],
[0, 0],
[1, 1]])
NumPy バージョン 1.5.1 以前でnp.unravel_index
は、最初の引数に配列のようなオブジェクトが渡されると ValueError が発生することに注意してください。その場合、リスト内包表記を使用できます。
In [17]: [np.unravel_index(p, A.shape) for p in np.argsort(A, axis=None)[::-1]]
Out[17]: [(1, 0), (0, 1), (0, 0), (1, 1)]