Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在矩阵中分别查看每一行(Matlab)_Arrays_Matlab_Matrix_While Loop - Fatal编程技术网

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

Arrays 在矩阵中分别查看每一行(Matlab),arrays,matlab,matrix,while-loop,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

我在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
 1     2     0
 1     2     0
 1     2     0
 1     2     0
如果开始时任何值高于零,则while将不会启动,一旦有一个值高于零,while将立即停止

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


感谢您的时间和帮助。

您当前的问题是,在第三行中的任何值打破条件的那一刻停止迭代。如果我错了,请纠正我,但我认为您需要的是继续对其余行进行迭代,直到所有第三列都破坏了条件

你可以这样做:

inds = true(size(Vf,1),1);
while any(inds)
    Vf(inds,:) = Vf(inds,:)+1;
    inds = Vf(:,3) < 0;
end
inds=true(大小(Vf,1),1);
而任何(IND)
Vf(inds,:)=Vf(inds,:)+1;
inds=Vf(:,3)<0;
结束
当然,对于您提供的简单添加,有一种更好更快的方法:

inds = Vf(:,3)<0; 
Vf(inds,:) = bsxfun(@minus, Vf(inds,:), Vf(inds,3));

inds=Vf(:,3)如果每列的初始值不同,为什么您认为您(使用此代码)会得到这个期望的结果?因为我希望它向每行添加不同的量,所以第1行将添加2,第2行将添加5。这有意义吗?@user2519890:对于示例中的简单加法:为什么不执行
inds=Vf(:,3)是的,它有意义。但是你的增量是在整个矩阵Vf上,你需要分别计算每行的条件和增量。看看Rody answerAdiel,是的,这是我的问题,我不知道如何分别看每一行,我知道问题是什么,但不是解决方案。是的,罗迪给出的解决方案正是我所需要的。不过谢谢你。谢谢Rody,我的实际函数并不像添加1那么简单,所以while函数是我需要的解决方案。再次感谢。@user2519890:我想也是:)很高兴能帮忙。
inds = Vf(:,3)<0; 
Vf(inds,:) = bsxfun(@minus, Vf(inds,:), Vf(inds,3));