use*_*452 3 matlab if-statement
我有一个包含两列和六行的矩阵,并希望使用以下代码构建第二个:
for i=2
if F(:,i)<50
G(:,i) = 1
end
end
Run Code Online (Sandbox Code Playgroud)
但没有任何反应......
想法是,如果F中第二列中的值小于50,则G中的对应值将为1.
对不起,可能是基本的问题,但不知道为什么这不起作用.如果我改变以评估是否有F值~= 50,那么一切都按预期工作.
谢谢你的帮助.
您的if陈述只执行一次 - 每个元素不会执行一次.虽然F(:,i)<50返回一个值数组,但if它是true或false; 因此,下一行只执行一次(在G(:,i)中的所有元素上,或者都不执行).
例如,看到这段代码:
if(1 < [0 1 2]), disp('true'); end
Run Code Online (Sandbox Code Playgroud)
它不会产生输出,即使第三个元素也是如此.另一方面,
if(1 < [2 3 4]), disp('true'); end
Run Code Online (Sandbox Code Playgroud)
确实产生了输出......
一般来说,以下内容:
1 < [0 1 2]
Run Code Online (Sandbox Code Playgroud)
产生
0 0 1
Run Code Online (Sandbox Code Playgroud)
不确定为什么你说它不起作用,<但它确实有效~=.也许没有等于50的元素,所以它"似乎"才有效?
一般来说,有一条更好的方法可以用一条线做你想做的事:
G(F(:,2)<50,2)=1
Run Code Online (Sandbox Code Playgroud)
这使用"逻辑索引",并且比循环快得多.它将考虑F(:,2)的每个元素,并修改G中的相应元素.
最后一条评论:使用变量并不是一个很好的做法,i因为它具有内置值sqrt(-1).如果你有任何依赖于它的代码具有该值,那么意外地用任何其他值覆盖它会破坏它.这不是你今天的代码问题 - 但为什么将来为自己设置一个问题.