2012-02-28 8 views
52

Numpy配列の最大要素のインデックスを取得しようとしています。 これはnumpy.argmaxを使用して行うことができます。私の問題は、配列全体の中で最大の要素を見つけてその指標を得たいということです。非平坦なインデックスを返すnumpy配列のArgmax

numpy.argmaxは、1軸に沿って適用することができます。これは、私が望むものではありません。また、平坦な配列に適用することもできます。

私の問題は、numpy.argmaxaxis=Noneを使用すると、多次元インデックスが必要なときにフラットインデックスを返します。

divmodを使用するとフラットなインデックスを取得できますが、これは醜い感じです。これを行うためのより良い方法はありますか?

答えて

90

あなたはnumpy.argmax()の結果にnumpy.unravel_index()を使用することもできます。

>>> a = numpy.random.random((10, 10)) 
>>> numpy.unravel_index(a.argmax(), a.shape) 
(6, 7) 
>>> a[6, 7] == a.max() 
True 
16
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を返します)。

+5

これだけではなく、二度、配列を3回反復します。最大値を見つけるのに一度、 '=='の結果を作るために2回目、そしてこの結果から 'True'値を抽出するために3回目です。最大値に等しい項目が複数ある可能性があります。 –

関連する問題