3

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

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

但是什么也没有发生...

这个想法是,如果 F 中第二列的值小于 50,则 G 中的相应值将是 1。

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

谢谢你的帮助。

4

1 回答 1

6

您的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). 如果您在任何地方都有依赖于它具有该值的代码,那么意外地用任何其他值覆盖它会破坏它。这不是您今天的代码的问题 - 但为什么要为将来的问题设置自己。

于 2013-06-06T14:59:59.790 回答