2014-10-03 32 views
0

我想計算兩組數據之間的相關性,而不使用for-loop。循環,下面的代碼是解決方案。如何計算此公式而不使用for循環

clear all 
clc 
x = [1 2 3 4 5 6 7]; 
y = [7 6 5 4 3 2 1]; 
sum = 0; 
for i = 1:length(x) 
    sum = sum + (x(i)-mean(x))*(y(i)-mean(y)); 
end 
p = sum/(length(x)-1) 
+1

如果你仔細觀察,你可以看到自己,你用同樣的迭代進行的elementwise multiplicatons,如果給你一些提示解決它。 – Divakar 2014-10-03 04:30:41

+2

@Divakar,你的意思是'sum((x-mean(x))。*(y-mean(y)))/(length(x)-1)',它的確有用。謝謝。 – CroCo 2014-10-03 04:36:30

+1

幹得好!感覺很好,我敢打賭,你自己! – Divakar 2014-10-03 04:38:05

回答

1

如下

clear all 
clc 
x = [1 2 3 4 5 6 7]; 
y = [7 6 5 4 3 2 1]; 
p = sum((x-mean(x)).*(y-mean(y)))/(length(x)-1); 
0

看起來像我的協變性。使這些行矢量列向量,然後採取任何一個小對角線cov(x,y)的元素,你應該有相同的結果。

0

更換

sum = 0; 
for i = 1:length(x) 
    sum = sum + (x(i)-mean(x))*(y(i)-mean(y)); 
end 
p = sum/(length(x)-1) 

p = sum((x-mean(x)) .* (y-mean(y)))/(length(x)-1) 

編輯:哎呀,應該有閱讀評論。