有没有什么办法可以避免在下面的代码中使用循环? 我正在做一个减少总和,即分组a和b的所有相同指数的值。替换为这个MATLAB脚本中的循环
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
有没有什么办法可以避免在下面的代码中使用循环? 我正在做一个减少总和,即分组a和b的所有相同指数的值。替换为这个MATLAB脚本中的循环
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
这正是*意味着什么accumarray
为:
>> accumarray(a.',b.')
ans =
0.60000
0.90000
0.60000
* 其实,这是最简单的件事accumarray
一样。它默认为@sum
,但您可以指定自己的函数来告诉它如何处理累计索引。
这是一个非常昂贵避免环路的:
rsum = b*(bsxfun(@eq,a.',unique(a)));
的总和在a
的元件的增加的顺序给出。此外,a
未在b
索引的情况下适用。
nice'bsxfun'。 – GameOfThrows
@GameOfThrows谢谢,我在这里有很棒的'bsxfun'老师。 :-) – 2016-10-04 15:30:33
:D让我猜,Divakar? – GameOfThrows
你能解释一下你在做什么吗? –
我正在做一个减少总和,即分组并将b中所有相同索引的值相加。 – Vimos
您需要循环以减少求和。此外,该代码似乎并没有减少sumation .... –