web-dev-qa-db-ja.com

多次元numpy配列の最大のアイテムの位置を取得

多次元numpy配列の最大のアイテムの位置を取得するにはどうすればよいですか?

65
kame

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)
_
150
Manoj Govindan

(編集)削除された古い回答を参照していました。そして、受け入れられた答えは私の後に来ました。私はargmaxが私の答えよりも優れていることに同意します。

このようにすると、より読みやすく直感的になりませんか?

numpy.nonzero(a.max() == a)
(array([1]), array([0]))

または、

numpy.argwhere(a.max() == a)
4
otterb

単純に関数を書くことができます(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)
1
iFederx