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