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

Matlab是否用零覆盖矩阵中的随机列?,matlab,matrix,Matlab,Matrix,我使用下面的代码将矩阵中看起来随机的列替换为零(实际上它们不是随机的,而是对应于人类运动的自由度)。代码是有效的,但我觉得必须有一种更有效的方法来做到这一点。矩阵有128列,我还没有完成 subject(subNum).trial(trialNum).Qsagittal = subject(subNum).trial(trialNum).Q; for column = 1:9 switch column case 2 subject(subNum)

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

正如@jucestain所建议的,您不需要逐个更新列1。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)

我认为上述代码可以替换为
受试者(subNum).试验(trialNum).q矢状(:,[2 3 5 6 8 9])=0
。也许在你得到你想要的东西之前,你可以把它弄糟。您如何生成
案例
数字,即如何获得2,3,5,6,8,9?这很有效!真不敢相信事情竟那么简单。我必须手动生成案例编号,但这将节省大量时间。