loop su tutte le combinazioni possibili
-
27-10-2019 - |
Domanda
Vorrei includere un ciclo nel mio script che trova la correlazione di ogni possibile combinazione dei dati. Questo può essere fatto manualmente il seguente codice:
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);
Tuttavia, mi piacerebbe fare questo in un ciclo, ho iniziato, ma non sono riusciti al primo ostacolo. Il mio tentativo di ciclo, che non funziona è la seguente:
SNames=fieldnames(Data);
for i=1:numel(SNames);
[R{i},P{i}] = corrcoef(Data.(SNames{i}),Data.(SNames{i+1}));
end
sto lottando per sapere come dire MATLAB per ciclare su una diversa combinazione di valori con ogni iterazione.
Qualsiasi aiuto fornito sarebbe molto apprezzato.
Soluzione
provare qualcosa di simile:
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
Altri suggerimenti
@ItamarKatz risposta è un buon compromesso. Tuttavia, se non si ha la casella degli strumenti statistici, non è possibile utilizzare il combnk di comando.
In tal caso, è possibile scaricare combinazioni generatore da qui .