0

我正在使用下面的代码用零替换矩阵中看起来随机的列(实际上它们不是随机的,而是对应于人类运动的自由度)。该代码有效,但我觉得必须有一种更有效的方法来做到这一点。矩阵有 128 列,我还没有完成!

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
4

1 回答 1

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) = [];

为了将来参考,如果有人真的想将 9 个随机列中的 6 个分配为零,可以通过使用此索引来实现:

idx = randperm(9,6)
于 2013-09-30T08:24:24.387 回答