回答:
>>> import numpy as np
>>> a = np.array([[1,2,3],[4,3,1]])
>>> i,j = np.unravel_index(a.argmax(), a.shape)
>>> a[i,j]
4
a = np.array([[1,4,3],[4,3,1]])
で戻りi,j==0,1
、での解が無視されることを確認してくださいi,j==1,0
。すべての最大値のインデックスについては、代わりに使用してくださいi,j = where(a==a.max()
。
argmax()
各行の最初の出現のみを返します。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html
成形された配列に対してこれを行う必要がある場合、これは次の方法よりうまく機能しますunravel
。
import numpy as np
a = np.array([[1,2,3], [4,3,1]]) # Can be of any shape
indices = np.where(a == a.max())
条件を変更することもできます。
indices = np.where(a >= 1.5)
上記はあなたが要求した形で結果を与えます。または、次の方法でx、y座標のリストに変換できます。
x_y_coords = zip(indices[0], indices[1])
indices = np.where(a==a.max())
3行目ですか?
.max()
代わりに@ atomh33lsによって指摘された2番目のエラーがありました.argmax()
。回答を編集してください
x_y_coord = [(0, 2), (1, 1)]
@ eumiroの回答と一致せず、間違っていることに注意してください。たとえばa = array([[7,8,9],[10,11,12]])
、コードでこの入力にヒットがないことを確認してみてください。また、これはよりもうまく機能すると述べていますunravel
が、@ blasによって投稿されたソリューションは、1つの軸に沿ったjsutではなく、絶対最大値の問題に答えます。