2013-05-02 114 views
0

我正在尝试编写代码来执行某些数据上的相关性,但每次迭代都要从计算中排除一个特定列。 A是一个1000x60x5矩阵,B是一个1000x1载体。 目前,我有MATLAB相关循环排除特定列

out(60,5)= zeros; % preallocate for loop output 


for ques=1:size(A,2) 
    for rep=1:size(A,3) 
     out(ques,rep) = corr(A(:,[(1:ques-1):(ques+1:end)],rep),B(:),... 
     'rows','pairwise','Type','Spearman'); 
    end  
end 

有没有办法我可以指定(而不是[(1:ques-1):(ques+1:end)])排除从计算ques列?

+0

你是指'[(1:ques-1):(ques + 1:end)]'还是'[(1:ques-1),(ques + 1:end)]'?前者为 – Dan 2013-05-02 13:57:01

+0

。由于A是三维的,维度被指定为A(:,Z,rep),其中Z表示范围'1:end',但错过了'ques'。如果这有道理?我可能不会很好地解释它。 – 8eastFromThe3ast 2013-05-02 14:06:39

+0

我认为你的意思是后者。在Matlab中比较它们:'[(1:19):(21:60)]'和'[(1:19),(21:60)]',前者很简单'1:21',后者是“1:19”和“21:60”的串接,这是我认为你的意思 – Dan 2013-05-02 14:10:45

回答

1

我其实想要做的是使用该

out= NaN(1000,60,5); % preallocate for speed 
for part = 1:size(A,1) % loop for dim 1 
    for ques = 1:size(A,2) % loop for dim 2 
     for rep = 1:size(A,3) % loop for dim 3 
      cols = 1:size(A,2); 
      cols(ques)=[]; 
      out(part,ques,rep) = nanmean(A(part,cols,rep)); % exclusive means   
     end 
    end 
end 

out=nanmean(out,3); % collapse third dimension 

final = corr(out,B,'rows','pairwise','type','Spearman'); % do the correlation 

A每一行的手段排除反过来每一列,跨过第三个层面的崩溃,然后用B相关。

1

我假设您处理第三个维度的方式与您的预期相同。我认为你所做的一切都很好,但这是一种替代方案,在你的愿望下,ques == 1ques == size(A,2)就不会出错。不利的一面,它可能实际上比你的方法慢,我没有测试过。

out(59,60,5)= zeros; % preallocate for loop output 


for ques=1:size(A,2) 
    for rep=1:size(A,3) 
     cols = 1:size(A,2); 
     cols(ques) = []; 
     out(:,ques,rep) = corr(A(:, cols, rep),B,... 
     'rows','pairwise','Type','Spearman'); 
    end  
end 
+0

嗯......不幸的是,我现在得到了可怕的'???下标赋值尺寸不匹配。“错误... – 8eastFromThe3ast 2013-05-02 14:18:21

+0

@ 8eastFromThe3ast嗯......你在哪一行得到错误?那个时候每个下标的值是多少? – Dan 2013-05-02 14:54:30

+0

它在函数行出错('out ...')。我现在已经离开了我的工作电脑,但是当我有机会时我会检查下标值 – 8eastFromThe3ast 2013-05-02 16:01:39