Matlab:如果某个条件为真,则从数组中删除行时出现问题

Mik*_*ike 0 arrays matlab loops dataset

创建数据集数组(数据)后,我想删除Var4取特定值的所有行.这是我到目前为止所做的:

for i=1:length(data.perf)
    if data.Var4(i)==2
        data(i,:)=[]
    end
end
Run Code Online (Sandbox Code Playgroud)

问题当然是数组在条件成立的每次运行中变短,因此它会在检查所有行之前停止.当i=length(data.perf)阵列缩短约50行时.我想你们得到了问题.有人可以建议我一个优雅的解决方案吗?我将来必须经常做这样的事情.

gro*_*ndi 5

你确定要循环length(data.perf)而不仅仅是length(data)吗?从背景来看并不清楚,但会更有意义......

第一个建议:反转你的循环可以解决数组变短的问题(for i = length(data.perf):-1:1...)

更优雅的解决方案是在没有for循环的情况下完成它

data(data.Var4==2, :) = [];