有沒有什麼辦法可以避免在下面的代碼中使用循環? 我正在做一個減少總和,即分組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 .... –