有什么方法可以避免在以下代码中使用循环? 我正在做一个简化求和,即对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
答案 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
个元素的递增顺序给出。此外,适用于a
中b
不是索引的情况。