2012-01-07 25 views
8

私は、numpy.ndarrayを持っていますが、その最大値は大抵2回以上出現します。numpy.ndarrayで最大値の最後の出現を見つける方法

EDIT:著者はさらに良く、

を言うかこれは、numpy.argmax: how to get the index corresponding to the *last* occurrence, in case of multiple occurrences of the maximum valuesから微妙に異なっている、それは、配列内の最大値のすべての出現のインデックスのリストを取得することは可能でしょうか?

私の場合は、そのようなリストを取得するにを証明することができる一方で、非常に高価

それはnumpy.argmaxのようなものを使用することにより最大値が最後に出現する位置のインデックスを見つけることは可能ですか?私はこれが2

import numpy as np 
a=np.array([0,0,4,4,4,4,2,2,2,2]) 
print np.argmax(a) 
すなわち、最初に現れるインデックスを返します。たとえば

(数百があるかもしれないので)最後の出現のだけインデックスではなく、すべてのオカレンスの配列を見つけたいです

しかし、私は5を出力します。

+0

id(a) == id(b.base) # True 
の可能重複[numpy.argmax:に対応するインデックスを取得する方法*最後*発生、最大値の複数の発生の場合には(http://stackoverflow.com/questions/7038975/ numpy-argmax-how-to-the-get-the-last-of-the-caに対応する) – outis

+0

著者は、すべての出現のインデックスとそこに与えられた解を望んでいます。 'occurences = np.where (a == a.max()) 'は、すべての最大値の配列を生成します。私の場合は –

+0

で非常に高価かもしれませんが、答えはすべての出現を取得する方法のみを扱いますが、質問者は両方を求めて、 「複製」するのではなく、 – outis

答えて

14

numpy.argmaxは最初のオカレンスのインデックスのみを返します。あなたは、配列の逆ビューにargmaxを適用することができます:

import numpy as np 
a = np.array([0,0,4,4,4,4,2,2,2,2]) 
b = a[::-1] 
i = len(b) - np.argmax(b) - 1 
i  # 5 
a[i:] # array([4, 2, 2, 2, 2]) 

注numpyの配列をコピーしませんが、代わりに逆の順序でそれにアクセスstrideと、元のビューを作成します。

+0

最後のオカレンスのインデックスを取得する同等の関数はありませんか?また、メモリ使用量を倍増させることは言うまでもなく、O(n)操作で配列を逆転させることはありませんか? –

+3

逆ビューは非常に効率的であるため、別の機能があります。 – outis

関連する問題