Matlab是否用零覆盖矩阵中的随机列?
我使用下面的代码将矩阵中看起来随机的列替换为零(实际上它们不是随机的,而是对应于人类运动的自由度)。代码是有效的,但我觉得必须有一种更有效的方法来做到这一点。矩阵有128列,我还没有完成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)
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?这很有效!真不敢相信事情竟那么简单。我必须手动生成案例编号,但这将节省大量时间。