перебрать все возможные комбинации - PullRequest
1 голос
/ 11 января 2012

Я хотел бы включить цикл в мой скрипт, который находит корреляцию каждой возможной комбинации данных.Это можно сделать вручную с помощью следующего кода:

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);

Тем не менее, я хотел бы сделать это в цикле, я начал, но потерпел неудачу при первом препятствии.Моя попытка зацикливания, которая не работает, показана ниже:

SNames=fieldnames(Data);
for i=1:numel(SNames);
    [R{i},P{i}] = corrcoef(Data.(SNames{i}),Data.(SNames{i+1}));
end

Я изо всех сил пытаюсь узнать, как заставить matlab перебирать различные комбинации значений при каждой итерации.Любая помощь будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Попробуйте что-то вроде этого:

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
1 голос
/ 12 января 2012

@ ItamarKatz ответ хороший.Однако, если у вас нет набора инструментов статистики, вы не можете использовать команду combnk .
В этом случае вы можете скачать генератор комбинаций отсюда.

...