【问题标题】:if greater than matlab如果大于matlab
【发布时间】:2013-06-06 23:05:59
【问题描述】:

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

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

但是什么也没发生……

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

抱歉,可能是基本问题,但不知道为什么这不起作用。如果我更改来评估 F 值是否~= 50,那么一切正常。

感谢您的帮助。

【问题讨论】:

    标签: matlab if-statement


    【解决方案1】:

    您的 if 语句只执行一次 - 而不是每个元素执行一次。 F(:,i)&lt;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
    

    不知道为什么你说它不适用于&lt;,但它确实适用于~=。也许没有等于 50 的元素,所以它只是“似乎”起作用?

    一般来说,有一个更好的方法来做你想做的事,只需一行:

    G(F(:,2)<50,2)=1
    

    这使用“逻辑索引”,并且比循环快得多。它会考虑F(:,2)的每个元素,并修改G中的对应元素。

    最后一条评论:使用变量i 不是很好的做法,因为它有一个内置值sqrt(-1)。如果您在任何地方都有依赖于它具有该值的代码,那么不小心用任何其他值覆盖它会破坏它。这不是您今天的代码的问题,而是为什么要为将来的问题做好准备。

    【讨论】:

    • +1 我总是喜欢对逻辑语句的解释。它们很容易出错。
    猜你喜欢
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多