2016-12-09 3 views
2

Ich möchte meinen Code vereinfachen, weil es sehr zeitaufwendig ist. In meinem Problem ist R ungefähr 4000, also sollte Korr Funktion für mehr als 16000000 Zeiten angerufen werden. Kann ich diesen Code vereinfachen?Wie kann ich eine verschachtelte Schleife in Matlab vereinfachen?

for i=1:R 

    for j=1:R 

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

    end 

end 

edit: Also, sollte ich sagen, dass, korr Funktion von mir geschrieben und es Korrelation zwischen zwei Funktionen berechnen.

und das ist meine korr Funktion:

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

Zuerst sieht es aus wie Sie 'correlation' Funktion in der falschen Art und Weise verwenden: es muss 4 Argumente enthalten (5. ist nicht notwendig). Sehen Sie sich diese [Dokumentation] an (https://www.mathworks.com/help/antenna/ref/correlation.html?searchHighlight=correlation&s_tid=doc_srchtitle). Und die zweite: 'correlation' kann nicht funktioniert für' I 'und 'J' von Array-Typ, also denke ich, dass wir Schleife mit einigen' arrayfun' oder 'bsxfun' vermeiden können, aber wir noch verwenden, um' correlation' für 16m mal (4000 * 4000) ... Aber ich bin mir nicht sicher hier :) –

+0

danke für Ihre Antwort @Mikhail_Sam; aber corrlation function ist eine von mir geschriebene Funktion. Ich habe meine Frage bearbeitet. –

+0

Ah, okay! Dann rate ich Ihnen, es umzubenennen, um das Überschreiben des eingebauten Funktionsnamens zu vermeiden. Um Ihnen zu helfen, müssen wir seinen Code sehen: Vielleicht können wir einige Aktionen in ihn hinein vektorisieren! –

Antwort

2

Hier ist eine vektorisierte Version:

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

Vielen Dank. Es wirkt wie ein Zauber! –

+0

Froh, wenn es helfen kann! – rahnema1

Verwandte Themen