Iが平坦アレイb
有する:numpyのインデックス - numpy.argmax.reduceat
a = numpy.array([0, 1, 1, 2, 3, 1, 2])
そして各 "チャンク" の開始をマーキングインデックスの配列をc
:
b = numpy.array([0, 4])
私は縮小を使用して、各「チャンク」の最大値を見つけることができます知っている:
m = numpy.maximum.reduceat(a,b)
>>> array([2, 3], dtype=int32)
しかし...ベクトル化された操作(リスト、ループなし)を持つ、のような最大<edit>
のインデックスを(numpy.argmax
のように)見つける方法はありますか?
私が答えと思っていたので、一時的に私の質問を削除: 'numpy.argmax(numpy.equal.outer(M、A)、軸= 1)'、それは例wherのために動作しません。同じ最大値が複数の場所で発生する... – Benjamin
たとえば、この配列の場合、 'a = numpy.array([0,1,1,3,3,1,2])' 2つのチャンクで発生します。 – Benjamin
問題は 'np.maximum'は' reduceat'を持つ 'ufunc'です。これは効果的に配列全体を反復し、一度に2つの値を比較します。しかし、 'np.max'と' np.argmax'は一度に配列全体を操作する関数です。彼らは 'ufunc'ではありません。 – hpaulj