在算术运算中使用逻辑而不是整数数组和值是否有任何缺点?

时间:2015-09-17 05:52:02

标签: matlab

对于涉及整数的运算,是一个逻辑值的向量,它等于一个整数向量,取值是0和1吗?

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

2 个答案:

答案 0 :(得分:10)

这实际上取决于案例,但与编程一样:变量的显式转换优于隐式!

这是一个简单的例子,你可以看到差异:

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)

第一个summand是 double ,第二个是逻辑。但是作为它们是算术运算的一部分,两个加法都被处理为 double 由于z也是 double ,结果是

z =

     0     2     0     2     0

现在考虑以下事项:

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

第一个加数是 double ,第二个是逻辑。再次,他们被视为。但z逻辑,因此实际 double 结果将转换为逻辑

z =

     0     1     0     1     0

答案 1 :(得分:1)

通常,但并非总是如此。

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

索引其他数组将正常工作(请参阅thewaywewalk'答案),但类型检查可能会导致问题。