我有一个两列六行的矩阵,并想用以下代码构建第二个:
for i=2
if F(:,i)<50
G(:,i) = 1
end
end
但是什么也没有发生...
这个想法是,如果 F 中第二列的值小于 50,则 G 中的相应值将是 1。
抱歉可能是基本问题,但不知道为什么这不起作用。如果我改变以评估 F 值是否~= 50
,那么一切都按应有的方式工作。
谢谢你的帮助。
我有一个两列六行的矩阵,并想用以下代码构建第二个:
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)
. 如果您在任何地方都有依赖于它具有该值的代码,那么意外地用任何其他值覆盖它会破坏它。这不是您今天的代码的问题 - 但为什么要为将来的问题设置自己。