vect = [1 2 3 4 5 6 7 8 9]
という名前のベクトルと という名前の別のベクトルがあるとしましょうintervals = [1 3 6 9]
。vest
を使用して、の要素の部分和の別のベクトルを取得することは可能intervals
ですか? 私はこのようなことをしたい:
部分和 1 = 1 + 2 + 3 ( からvect(1)
までの要素vect(3)
)
部分和 2 = 4 + 5 + 6 ( からvect(3 + 1)
までの要素vect(6)
)
部分和 3 = 7 + 8 + 9 ( からvect(6 + 1)
までの要素vect(9)
)
だから私がやりたいのは、最初の要素の合計を取得してから、前の合計にない最初の要素から始まるk
別の要素の合計などを取得することです.k
元の問題:n
元の問題は次のようなものでした:値と値を
持つベクトルを受け取りますk
。t = max(v) / k
インターバルを取りましょう。さて、n
間隔 [0, t) には からの値がいくつありますか? [t, t * 2) はどうでしょうか? [2 * t, 3 * t) はどうでしょうか? 等々。これまでは、accumarray(v, 1)
それぞれの値の数を見つけてint = (0:max(v)/k:max(v))
、間隔ベクトルを作成していましたが、今ではsum(accumarray(v, 1))
部分和を取得する必要があります。
これを使用してテストしたい場合 ( http://pastebin.com/jCZ3qYhz : で生成accumarray
) とk = 16
、部分和は次のようにする必要があります: 157, 167, 136, 251, 726, 1300, 1152.. for/while ループなしでこれを実行できるようにするには:) ベクトル化が鍵です!
編集:
最初の合計を取得するには、これを使用します: sum(accumarray(v, 1)(1:16))
、2番目の合計には: を使用しますsum(accumarray(v, 1)(17:32))
が、この操作をベクトル化する方法がわかりません。私はこれを試しました:i = (1:16:500)
。しかしsum(accumarray(v, 1)(i(1:length(i)) : i(2:length(i)))
、実際には機能していないか、正しいものを使用していません。