在矩阵中分别查看每一行(Matlab)

时间:2013-07-02 08:23:32

标签: arrays matlab matrix while-loop

我在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

如果任何值在零开始时都不会启动,并且只要一个值超过零就会停止。

我希望这是有道理的,我已经提供了足够的信息

感谢您的时间和帮助。

1 个答案:

答案 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可以解决问题。