これらの2つは非常によく似ているはずです。だから、なぜ蓄積するのは最大でもargmaxではないのですか?なぜnumpy.maximumがnumpy.argmaxで動作しないのですか
EDIT:効率的なargmaxを最もpythonic/numpy-esqueの方法で蓄積する方法について、自然なフォローアップの質問があります。
これらの2つは非常によく似ているはずです。だから、なぜ蓄積するのは最大でもargmaxではないのですか?なぜnumpy.maximumがnumpy.argmaxで動作しないのですか
EDIT:効率的なargmaxを最もpythonic/numpy-esqueの方法で蓄積する方法について、自然なフォローアップの質問があります。
max
連想ですが、argmax
はないので:
max(a, max(b, c)) == max(max(a, b), c)
argmax(a, argmax(b, c)) != argmax(argmax(a, b), c)
これは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])
にジャンプを探しにアレイ。 – hpaulj