使用区间的向量中元素的总和

Sum of elements in a vector using intervals

假设我有一个名为 vect = [1 2 3 4 5 6 7 8 9] 的矢量和另一个名为 intervals = [1 3 6 9] 的矢量。是否可以使用 intervals 获得 vest 中元素的部分和的另一个向量?我想做这样的事情:

部分和 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 间隔。现在,区间 [0, t) 中有多少来自 n 的值? [t, t * 2) 呢? [2 * t, 3 * t) 呢?等等。直到现在,我使用 accumarray(v, 1) 来查找我有多少个值,并使用 int = (0:max(v)/k:max(v)) 来构建 invervals 向量,但现在我必须 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)),第二个:sum(accumarray(v, 1)(17:32)),但我不知道如何向量化这个操作。我试过这个:i = (1:16:500)。然后 sum(accumarray(v, 1)(i(1:length(i)) : i(2:length(i))) 但它并没有真正起作用,或者我没有使用正确的东西。

对于第一个问题,我会使用这个:

cs = cumsum(vect);
i2 = intervals(2:end);
result = [cs(i2(1)), diff(cs(i2))]

result =

     6    15    24

这将构建所有元素的cumulative sum,找到部分的末端,然后找到部分末端的总和之间的差异(恰好是元素的总和-之间)。