如果大于matlab

时间:2013-06-06 14:54:16

标签: matlab if-statement

我有一个包含两列和六行的矩阵,并希望使用以下代码构建第二个:

 for i=2
if F(:,i)<50
G(:,i) = 1
end
end

但没有任何反应......

这个想法是,如果F中第二列的值小于50,那么G中的相应值将为1.

对不起可能是基本问题,但不知道为什么这不起作用。如果我改变以评估F值是否~= 50,那么一切都按预期工作。

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

您的if语句只执行一次 - 每个元素不会执行一次。虽然F(:,i)<50返回值数组,但if为true或false;因此,下一行只执行一次(在G(:,i)中的所有元素上,或者都不执行)。

例如,请看这段代码:

if(1 < [0 1 2]), disp('true'); end

它不会产生输出,即使第三个元素也是如此。另一方面,

if(1 < [2 3 4]), disp('true'); end

确实产生了输出......

一般来说,以下内容:

1 < [0 1 2]

产生

0 0 1

不确定为什么你说它对<不起作用,但它适用于~=。也许没有等于50的元素,所以它“似乎”才有效?

一般来说,有一种更好的方法可以用一行来做你想要的事情:

G(F(:,2)<50,2)=1

这使用“逻辑索引”,并且比循环快得多。它将考虑F(:,2)的每个元素,并修改G中的相应元素。

最后一条评论:使用变量i不是很好的做法,因为它的内置值为sqrt(-1)。如果你有任何依赖于它的代码具有该值,那么意外地用任何其他值覆盖它会破坏它。这不是你今天的代码问题 - 但为什么将来为自己设置一个问题。