Schleife über alle möglichen Kombinationen
-
27-10-2019 - |
Frage
Ich möchte eine Schleife in mein Skript aufnehmen, die die Korrelation jeder möglichen Kombination der Daten findet. Dies kann manuell durch den folgenden Code erfolgen:
clear all
%generate fake data
LName={'Name1','Name2','Name3'};
Data={rand(12,1),rand(12,1),rand(12,1)};
%place in a structure
d = [LName;Data];
Data = struct(d{:});
%find the correlation
[R,P] = corrcoef(Data.Name1,Data.Name2);
[R2,P2] = corrcoef(Data.Name1,Data.Name3);
[R3,P3] = corrcoef(Data.Name2,Data.Name3);
Ich möchte dies jedoch in einer Schleife tun, ich habe angefangen, aber bei der ersten Hürde gescheitert. Meine versuchte Schleife, die nicht funktioniert, wird unten gezeigt:
SNames=fieldnames(Data);
for i=1:numel(SNames);
[R{i},P{i}] = corrcoef(Data.(SNames{i}),Data.(SNames{i+1}));
end
Ich kämpfe darum, zu wissen, wie ich Matlab mit jeder Iteration eine andere Kombination von Werten aufsuchen soll.
Jede Hilfe wäre sehr geschätzt.
Lösung
Probieren Sie so etwas aus:
pairs = combnk (1:3,2) % all combinations of 2 elements taken out of the vector [1,2,3]
for i = 1 : size (pairs,1)
[R{i},P{i}] = corrcoef(Data.(SNames{pairs(i,1)}),Data.(SNames{pairs(i,2)}));
end
Andere Tipps
@Itamarkatz Antwort ist gut. Wenn Sie jedoch nicht über die Statistik -Toolbox verfügen, können Sie die nicht verwenden Combnk Befehl.
In diesem Fall können Sie herunterladen Kombinationsgenerator von hier.