Matlab用零覆盖矩阵中的随机列?

时间:2013-09-29 19:07:20

标签: matlab matrix

我正在使用下面的代码用零替换矩阵中的随机列(实际上它们不是随机的,而是对应于人类运动的自由度)。代码有效,但我觉得必须有一个更有效的方法来做到这一点。矩阵有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

1 个答案:

答案 0 :(得分: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)