【问题标题】:Look at each row separately in a matrix (Matlab)分别查看矩阵中的每一行(Matlab)
【发布时间】:2013-07-02 08:23:32
【问题描述】:

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

如果任何值一开始就大于零,则 while 将不会开始,一旦一个值大于零,则停止。

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

感谢您的时间和帮助。

【问题讨论】:

  • 如果每列的初始值不同,为什么你认为你会得到这个期望的结果(使用这段代码)?
  • 因为我希望它为每一行添加不同的数量,所以第 1 行将添加 2,第 2 行将添加 5。这有意义吗?
  • @user2519890:对于您示例中的简单添加:为什么不做inds = Vf(:,3)&lt;0; Vf(inds,:) = bsxfun(@minus, Vf(inds,:), Vf(inds,3));
  • 是的,这是有道理的。但是您的增量是在整个矩阵 Vf 上,您需要分别评估每行的条件和增量。看看罗迪的回答
  • Adiel,是的,这是我的问题,不知道如何分别查看每一行,我知道问题出在哪里,但不知道解决方案。是的,罗迪给出的解决方案正是我所需要的。不过谢谢。

标签: arrays matlab matrix while-loop


【解决方案1】:

您当前的问题是,您在第三行中的 any 值打破条件的那一刻停止迭代。如果我错了,请纠正我,但我认为您想要的是继续剩余行进行迭代,直到条件被 all 打破em> 第三列。

你可以这样做:

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

【讨论】:

  • 谢谢Rody,我的实际函数并不像加1那么简单,所以while函数是我需要的解决方案。再次感谢。
  • @user2519890:我也这么认为 :) 很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 2014-03-03
  • 2017-10-10
  • 1970-01-01
相关资源
最近更新 更多