循环所有可能的组合

时间:2012-01-11 15:17:02

标签: matlab correlation cross-correlation

我想在我的脚本中包含一个循环,它找到每个可能的数据组合的相关性。这可以通过以下代码手动完成:

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 个答案:

答案 0 :(得分:2)

尝试这样的事情:

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 :(得分:1)

@ItamarKatz答案很好。但是,如果您没有统计工具箱,则无法使用 combnk 命令 在这种情况下,您可以从此处下载combinations generator