循环遍历矩阵,找到满足约束的行值,创建新列

时间:2014-05-27 14:10:39

标签: matlab loops matrix constraints

我确信以前已经回答了类似的问题,但我是MATLAB的新手并且目前遇到了一个非常简单的问题。我有一个矩阵M,我想执行以下操作:遍历列C的所有值,如果这些值中的任何值不等于某个值,x副本将相应的值转换为矩阵中的另一列(称为Z),同时保留那些不满足条件的值。

我尝试了以下内容,但它没有做任何事情:

rows = size(M,1);

for i = 1:rows
   if M(:,x) ~= 0
      then M(:,Z) = M(:,x) 
   end 
end

1 个答案:

答案 0 :(得分:0)

看看你的评论,这是你想要完成的要点:

  1. 给定矩阵A,在此矩阵中选择两列:xZ
  2. 给定值d,我们希望找到x不同的所有值<{1}}。
  3. d中获取这些位置,然后将其复制到x中的相应位置。
  4. 让我们一步一步来做。在你的评论中给出你的例子:

    Z

    由于您是MATLAB的新手,让我们慢慢来看看。第一步是非常基本的MATLAB语法。它选择你的参数以及一些基本的设置。第二步将为我们提供一个逻辑数组,告诉我们% // Step #1 A = [1 2 3; 4 5 6; 7 8 10]; x = 1; % //Column x Z = 3; % //Column Z d = 1; % //Value to compare to % //Step #2 loc = A(:,x) ~= d; %//Step #3 A(loc, Z) = A(loc, x); 列中的哪些行不等于x 。最后一步将在列d中找到这些相应的行,并将这些值从列Z复制到x

    MATLAB的优点在于它本身可以进行这些矢量化操作。优化的最佳方法是尽可能多地尝试避免循环。如果您必须重复繁重的计算,或者您绝对无法避免Z循环的情况,请仅使用for循环。

    作为奖励,让我们看看MATLAB如何显示我们上面谈过的每一步(除了第一步,因为它是多余的)。

    for

    请注意,% //Step #2 loc = A(:,x) ~= d >> loc loc = 0 1 1 %// Step #3 A(loc, Z) = A(loc, x) >> A = 1 2 3 4 5 4 7 8 7 是一个逻辑数组,loc为false,0为真。因此,第2行和第3行满足这些值不等于1的条件。

    另外,FWIW,欢迎来到StackOverflow!