Numpy配列の最大要素のインデックスを取得しようとしています。これは、numpy.argmax
を使用して実行できます。私の問題は、配列全体で最大の要素を見つけて、そのインデックスを取得したいということです。
numpy.argmax
は、1つの軸に沿って適用できますが、これは私が望むものではないか、またはフラット化された配列に適用できます。
私の問題は、numpy.argmax
をaxis=None
とともに使用すると、多次元インデックスが必要なときにフラットインデックスが返されることです。
divmod
を使用して非フラットインデックスを取得できますが、これは見苦しくなります。これを行うより良い方法はありますか?
numpy.unravel_index()
の結果に numpy.argmax()
を使用できます。
>>> a = numpy.random.random((10, 10))
>>> numpy.unravel_index(a.argmax(), a.shape)
(6, 7)
>>> a[6, 7] == a.max()
True
_np.where(a==a.max())
_
最大要素の座標を返しますが、配列を2回解析する必要があります。
_>>> a = np.array(((3,4,5),(0,1,2)))
>>> np.where(a==a.max())
(array([0]), array([2]))
_
これは、argmax
と比較して、最大値に等しいすべての要素の座標を返します。 argmax
はそのうちの1つだけを返します(np.ones(5).argmax()
は_0
_を返します)。
最大値のすべての出現の非フラットインデックスを取得するには、argwhere
の代わりにwhere
を使用してeumiroの answer をわずかに変更できます。
np.argwhere(a==a.max())
>>> a = np.array([[1,2,4],[4,3,4]])
>>> np.argwhere(a==a.max())
array([[0, 2],
[1, 0],
[1, 2]])