2013-09-29 101 views
0

我正在使用下面的代碼來替換矩陣中的隨機查找列(實際上它們不是隨機的,而是對應於人體運動的自由度)。代碼有效,但我覺得必須有一個更有效的方法來做到這一點。該矩陣有128列,我還沒有完成!Matlab用零覆蓋矩陣中的隨機列?

subject(subNum).trial(trialNum).Qsagittal = subject(subNum).trial(trialNum).Q; 
for column = 1:9 
    switch column 
     case 2 
      subject(subNum).trial(trialNum).Qsagittal(:,column) = zeros(m,1); 
     case 3 
      subject(subNum).trial(trialNum).Qsagittal(:,column) = zeros(m,1); 
     case 5 
      subject(subNum).trial(trialNum).Qsagittal(:,column) = zeros(m,1); 
     case 6 
      subject(subNum).trial(trialNum).Qsagittal(:,column) = zeros(m,1); 
     case 8 
      subject(subNum).trial(trialNum).Qsagittal(:,column) = zeros(m,1); 
     case 9 
      subject(subNum).trial(trialNum).Qsagittal(:,column) = zeros(m,1); 
    end 
end 
+3

我認爲上述代碼可以用'subject(subNum).trial(trialNum).Qsagittal(:,[2 3 5 6 8 9])= 0'替換。也許會一直這樣,直到你得到你想要的。你如何生成'case'號碼,即你如何得到2,3,5,6,8,9? – Justin

+0

這有效!簡直不敢相信。我必須手動生成案例編號,但這會節省大量時間。 – dustynrobots

回答

1

由於@jucestain建議您不需要逐個更新列。 MATLAB允許你輸入向量作爲索引參數,所以假設你有:

idx = [2,3,5,6,8,9]; 

可以直接給零到所有列:

subject(subNum).trial(trialNum).Qsagittal(:,idx) = 0; 

只是一個猜測,但它似乎像你希望每個第二和第三個號碼在idx。你可以像這樣很容易做到這一點:

idx = 1:9; 
idx(1:3:9) = []; 

對於未來的參考,如果有人真的想要分配6出9分隨機列爲零,可以通過使用該索引來實現:

idx = randperm(9,6)