如果大于matlab



我有一个两列六行矩阵,想用下面的代码构建第二个矩阵:

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

但是什么也没发生……

思路是,如果F中第二列的值小于50,那么G中对应的值将为1。

抱歉可能是基本问题,但不知道为什么这不起作用。如果我改为评估F值是否为~= 50,则一切正常工作。

谢谢你的帮助

您的if语句只执行一次-不是每个元素执行一次。F(:,i)<50返回一个值数组,而if要么为真,要么为假;因此,下一行只执行一次(要么对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)。如果您在任何地方的代码依赖于它具有该值,那么意外地用任何其他值覆盖它将破坏该值。这不是你今天的代码问题,但为什么要为将来的问题做准备呢?

最新更新