【问题标题】:Are there any drawbacks using logical instead of integer arrays and values in arithmetic operations?在算术运算中使用逻辑而不是整数数组和值有什么缺点吗?
【发布时间】:2015-09-17 05:52:02
【问题描述】:

对于涉及整数的运算,逻辑值向量是否等同于取适当值 0 和 1 的整数向量?

如果我对逻辑对象而不是整数对象进行计算或将函数应用于逻辑对象,我会遇到意想不到的后果吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    这确实取决于情况,但在编程中一如既往:变量的显式转换比隐式转换好!

    这是一个简单的示例,您可以从中看出区别:

    x = [0 1 0 1 0]      %// 0     1     0     1     0
    y = logical(x)       %// 0     1     0     1     0
    
    y(y) = 5             %// 0     1     0     1     0
    x(y) = 5             %// 0     5     0     5     0
    y(x) = 5             %// error
    x(x) = 5             %// error
    

    因此,在对赋值左侧的索引变量进行索引时,决定了输出的类型。 只要你能确保你的输出总是翻倍,你就不应该遇到问题。

    看看这个更复杂的例子:

    z = double([0 0 0 0 0])
    z(y) = x(y) + y(y)
    

    第一个加数是double,第二个是逻辑。但是由于 它们是算术运算的一部分,因此两个加数都被视为 double 因为 z 也是 double,所以结果是

    z =
    
         0     2     0     2     0
    

    现在考虑以下几点:

    z = logical([0 0 0 0 0])
    z(y) = x(y) + y(y)  
    

    再次,第一个和是double,第二个是逻辑。他们再次被对待双重。但是zlogical,所以实际上double的结果被转换成logical

    z =
    
         0     1     0     1     0
    

    【讨论】:

      【解决方案2】:

      通常,但并非总是如此。

      最大的区别在于,对于任何数字输入,对islogical 的调用都将返回 false —— 这可以在您将索引数组作为输入传递的函数中完成。

      索引其他数组可以正常工作(请参阅 thewaywewalk 的回答),但类型检查可能会给您带来问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-15
        • 2016-10-21
        • 2023-01-30
        • 2016-05-21
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        相关资源
        最近更新 更多