2016-06-16 4 views
1

これらの2つは非常によく似ているはずです。だから、なぜ蓄積するのは最大でもargmaxではないのですか?なぜnumpy.maximumがnumpy.argmaxで動作しないのですか

EDIT:効率的なargmaxを最もpythonic/numpy-esqueの方法で蓄積する方法について、自然なフォローアップの質問があります。

+0

にジャンプを探しにアレイ。 – hpaulj

答えて

1

max連想ですが、argmaxはないので:

  • max(a, max(b, c)) == max(max(a, b), c)
  • argmax(a, argmax(b, c)) != argmax(argmax(a, b), c)
+0

OK。私はあなたが何を意味するかを見ます...うーん...これらのufuncsがどのように動作するのかわかりませんでした... – RAY

+0

私の心の中で、このargmaxが蓄積する方法は、現在/最後の最大値しかし、頭の爪に当たったのは、「最後の最大値」がこれまでの最大値であり、argmaxの値ではないという点です。 – RAY

+1

補足として、 'np.argmax'は' np.max'とともにufuncではありません。 'np.argmaximum'が欠けている方が良いということに注意してください。' <' – Eric

1

これはargmaxの一種であるあなたが望む蓄積?

サンプル配列:

In [135]: a 
Out[135]: array([4, 6, 5, 1, 4, 4, 2, 0, 8, 4]) 

すでに得た最大:

In [136]: am=np.maximum.accumulate(a)  
In [137]: am 
Out[137]: array([4, 6, 6, 6, 6, 6, 6, 6, 8, 8], dtype=int32) 

In [138]: a1=np.zeros_like(a) 

amが飛び込んだの要素を識別する。 np.diffも働いているだろう:ind見つけるの

In [139]: ind=np.nonzero(a==am)[0] 

In [140]: ind 
Out[140]: array([0, 1, 8], dtype=int32) 

In [141]: a1[ind]=ind  
In [142]: a1 
Out[142]: array([0, 1, 0, 0, 0, 0, 0, 0, 8, 0]) 

In [143]: np.maximum.accumulate(a1) 
Out[143]: array([0, 1, 1, 1, 1, 1, 1, 1, 8, 8], dtype=int32) 

代替方法 - あなたは `argmax`を作成するために` maximum.accumulate`にジャンプするために見ることができるam

In [149]: ind=np.nonzero(np.diff(am)) 

In [150]: ind = np.concatenate([[0],ind[0]+1]) 

In [151]: ind 
Out[151]: array([0, 1, 8]) 
関連する問題