2016-12-09 33 views
2

我想簡化我的代碼,因爲它非常耗時。在我的問題,R是一個回合4000,所以corr函數應該要求超過1600萬次。 haw可以簡化這個代碼嗎?如何簡化Matlab中的嵌套循環?

for i=1:R 

    for j=1:R 

     Red1 = Red1 + abs(corr (SelectedData,i,j)); 

    end 

end 

編輯:所以,我應該說,科爾功能是我寫的,它兩個特徵之間的相關性計算。

,這是我科爾功能:

function corr = corr (X, i, j) 

    covariance = (cov((X(:,i)),(X(:,j)))); 

    corr = (covariance(1,2))/((sqrt(var(X(:,i)))) * (sqrt(var(X(:,j))))); 


end 
+0

首先,它看起來像你在錯誤的方式使用'correlation'功能:必須包含4個參數(第5個是不必要的)。看看這個[文檔](https://www.mathworks.com/help/antenna/ref/correlation.html?searchHighlight=correlation&s_tid=doc_srchtitle)。 第二:'correlation'不能用於數組類型的'i'和'j',所以我認爲我們可以避免使用一些'arrayfun'或'bsxfun'的循環,但是我們仍然必須使用'correlation'16m次(4000 * 4000)...但我不確定:) –

+0

謝謝你的回覆@Mikhail_Sam;但相關函數是由我寫的函數。我編輯了我的問題。 –

+0

啊,好吧!比我建議你重命名它,以避免覆蓋內置的函數名稱。爲了幫助我們,我們需要看到它的代碼:也許我們可以將一些操作矢量化爲它! –

回答

2

這裏是一個矢量版本:

C = cov(SelectedData); 
V = sqrt(diag(C)); 
VP2 = bsxfun(@times,V,V.'); 
CORR = C ./ VP2; 
Red1 = sum(abs(CORR(:))); 
+0

非常感謝。它像一個魅力! –

+0

很高興,如果它可以幫助! – rahnema1