0

我正在尝试编写代码来对某些数据执行相关性,但每次迭代都要从计算中排除一个特定列。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列?

4

2 回答 2

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.

于 2013-05-03T14:18:11.513 回答
1

我假设您处理 3rd 维度的方式如您所愿。我认为你所做的很好,但这里有一个替代方案,当你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
于 2013-05-02T14:04:36.213 回答