多次元numpy配列の最大のアイテムの位置を取得するにはどうすればよいですか?
argmax()
メソッドが役立ちます。
更新
(コメントを読んだ後)argmax()
メソッドは多次元配列でも機能すると信じています。リンクされたドキュメントには、この例が示されています。
_>>> a = array([[10,50,30],[60,20,40]])
>>> maxindex = a.argmax()
>>> maxindex
3
_
更新2
( KennyTM のコメントのおかげで)unravel_index(a.argmax(), a.shape)
を使用して、インデックスをタプルとして取得できます。
_>>> from numpy import unravel_index
>>> unravel_index(a.argmax(), a.shape)
(1, 0)
_
(編集)削除された古い回答を参照していました。そして、受け入れられた答えは私の後に来ました。私はargmax
が私の答えよりも優れていることに同意します。
このようにすると、より読みやすく直感的になりませんか?
numpy.nonzero(a.max() == a)
(array([1]), array([0]))
または、
numpy.argwhere(a.max() == a)
単純に関数を書くことができます(2dでのみ機能します):
def argmax_2d(matrix):
maxN = np.argmax(matrix)
(xD,yD) = matrix.shape
if maxN >= xD:
x = maxN//xD
y = maxN % xD
else:
y = maxN
x = 0
return (x,y)