Matlab,如果条件没有循环

时间:2012-02-26 15:48:03

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

在循环中有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

2 个答案:

答案 0 :(得分:7)

使用logical indexing

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

答案 1 :(得分: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;