2013-05-02 38 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