假设我有一个名为的向量vect = [1 2 3 4 5 6 7 8 9]
和另一个名为 的向量intervals = [1 3 6 9]
。vest
是否可以使用获得另一个元素的部分和的向量intervals
?我想做这样的事情:
vect(1)
部分和 1 = 1 + 2 + 3(从到 的元素vect(3)
)
vect(3 + 1)
部分和 2 = 4 + 5 + 6(从到 的元素vect(6)
)
vect(6 + 1)
部分和 3 = 7 + 8 + 9(从到 的元素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))
构建 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)))
,但它并没有真正起作用,或者我没有使用正确的东西。