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