我正在尝试编写代码来对某些数据执行关联,但是每次迭代都要从计算中排除一个特定的列。 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
列?
答案 0 :(得分:1)
我假设您处理第三维的方式与您的预期一致。我认为你所做的很好但是这里有一个替代方案,当ques == 1
或ques == 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
相关联。