MATLAB相关循环不包括特定列

时间:2013-05-02 13:34:02

标签: matlab indexing correlation

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

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列?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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相关联。