我有一个两列六行矩阵,想用下面的代码构建第二个矩阵:
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)
。如果您在任何地方的代码依赖于它具有该值,那么意外地用任何其他值覆盖它将破坏该值。这不是你今天的代码问题,但为什么要为将来的问题做准备呢?