在此MATLAB脚本中替换for循环

时间:2016-10-04 15:15:00

标签: matlab vectorization

有什么方法可以避免在以下代码中使用循环? 我正在做一个简化求和,即对a进行分组并对b中相同索引的所有值求和。

a = [ 1 3 2 3 1 2]
b = [0.1 0.2 0.3 0.4 0.5 0.6]
for i = unique(a)
     c(i) = sum(b(ismember(a, i)))
 end

2 个答案:

答案 0 :(得分:6)

这正是accumarray的意思:

>> accumarray(a.',b.')
ans =

   0.60000
   0.90000
   0.60000

* 实际上,这是accumarray所做的最简单的事情。它默认为@sum,但您可以指定自己的函数来告诉它如何处理累积的索引。

答案 1 :(得分:2)

这是一个非常昂贵的避免循环:

rsum = b*(bsxfun(@eq,a.',unique(a)));

总和以a个元素的递增顺序给出。此外,适用于ab不是索引的情况。