我在Matlab(2012)中有一个矩阵,有3列和X行,X由用户定义,因此每次都有所不同。对于这个例子,虽然我将使用固定的5x3矩阵。
所以我想对矩阵中的每一行执行迭代函数,而第三列中的值低于某个值。然后将新值存储在同一矩阵中,以覆盖原始值。
以下代码是问题的简化版本。
M=[-2 -5 -3 -2 -4]; %Vector containing random values
Vf_X=M+1; %Defining the first column of the matrix
Vf_Y=M+2; %Defining the secound column of the matrix
Vf_Z=M; %Defining the third column of the matrix
Vf=[Vf_X',Vf_Y',Vf_Z']; %Creating the matrix
while Vf(:,3)<0
Vf=Vf+1;
end
disp(Vf)
我得到的结果是
1 2 0
-2 -1 -3
0 1 -1
1 2 0
-1 0 -2
理想情况下,我希望获得此结果
1 2 0
1 2 0
1 2 0
1 2 0
1 2 0
如果任何值在零开始时都不会启动,并且只要一个值超过零就会停止。
我希望这是有道理的,我已经提供了足够的信息
感谢您的时间和帮助。
答案 0 :(得分:0)
您当前的问题是,在第三行中任何的值破坏条件时,您将停止迭代。如果我错了,请纠正我,但我认为你想要的是继续对剩余的行进行迭代,直到条件被所有>打破第三列。
你可以这样做:
inds = true(size(Vf,1),1);
while any(inds)
Vf(inds,:) = Vf(inds,:)+1;
inds = Vf(:,3) < 0;
end
当然,对于您提供的简单添加,有一种更好,更快的方式:
inds = Vf(:,3)<0;
Vf(inds,:) = bsxfun(@minus, Vf(inds,:), Vf(inds,3));
但对于一般功能,上面的while
可以解决问题。