【问题标题】:Matlab, if condition without loopMatlab,如果条件没有循环
【发布时间】:2012-03-16 07:15:54
【问题描述】:

循环内有matices A(n,1), B(n,1) 和以下条件

for i=1:m
   if ( A(i, 1) > error )
      B(i,1) = 0;
   else
      B(i,1) = exp (-A(i,1) / 100)
   end
end

如何在不使用任何循环的情况下重写此条件?有没有可能是这样的

 if ( A(:, 1) > error )
      B(:,1) = 0;
   else
      B(:,1) = exp (-A(:,1) / 100)
 end

【问题讨论】:

    标签: matlab loops if-statement for-loop conditional-statements


    【解决方案1】:

    使用logical indexing:

    idxs = (A > error);
    B( idxs) = 0;
    B(~idxs) = exp(-A(~idxs) / 100);
    

    【讨论】:

      【解决方案2】:

      您的建议很接近。关键是要形成一个“逻辑索引”。

      i = A(:,1) > error;
      
      B(i,:) = 0;
      B(~i,:) = exp (-A(:,1) / 100);
      

      由于您的矩阵 A 和 B 是向量(一维矩阵),因此在这种情况下,(:,1)(i,:) 不是必需的,但由于它们在您的初始公式中,所以我将它们保留了。如果您是使用多维矩阵代替 (m * n) 您可以通过执行 i = A > error; 而不是 i = A(:,1) > error; 来形成 (m * n) 逻辑索引而不是 (m * 1)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        • 1970-01-01
        • 2012-10-20
        • 2015-12-16
        • 2014-04-14
        • 1970-01-01
        相关资源
        最近更新 更多