2 次元の numpy 配列 (MxN) と、合計したい 2 次元配列の各行の開始インデックスと終了インデックスを表す 2 つの 1 次元配列 (Mx1) があります。これを大きな配列で行う最も効率的な方法を探しています(できれば、現在行っているループを使用する必要はありません)。私がやりたいことの例は次のとおりです。
>>> random.seed(1234)
>>> a = random.rand(4,4)
>>> print a
[[ 0.19151945 0.62210877 0.43772774 0.78535858]
[ 0.77997581 0.27259261 0.27646426 0.80187218]
[ 0.95813935 0.87593263 0.35781727 0.50099513]
[ 0.68346294 0.71270203 0.37025075 0.56119619]]
>>> b = array([1,0,2,1])
>>> c = array([3,2,4,4])
>>> d = empty(4)
>>> for i in xrange(4):
d[i] = sum(a[i, b[i]:c[i]])
>>> print d
[ 1.05983651 1.05256841 0.8588124 1.64414897]
私の問題は次の質問に似ていますが、そこで提示された解決策はあまり効率的ではないと思います。その質問では、同じ行の複数のサブセットの合計を見つけたいので、cumsum()
使用できます。ただし、行ごとに 1 つの合計しか見つけられないため、これが合計を計算する最も効率的な方法になるとは思いません。
編集:申し訳ありませんが、コードに誤りがありました。以前に読み取ったループ内の行d[i] = sum(a[b[i]:c[i]])
。最初の次元のインデックスを忘れました。開始インデックスと終了インデックスの各セットは、2 次元配列の新しい行に対応します。