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

Ale*_*lex 3 matlab

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

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

the*_*alk 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
Run Code Online (Sandbox Code Playgroud)

因此,当指向索引左侧的索引变量时,确定输出的类型.因此,只要您能确保输出总是加倍,就不应该遇到问题.

看看这个更复杂的例子:

z = double([0 0 0 0 0])
z(y) = x(y) + y(y)
Run Code Online (Sandbox Code Playgroud)

第一个加数是,第二个是合乎逻辑的.但由于它们是算术运算的一部分,因此两个加法处理都是双重的.同样z双倍,结果是双倍.

z =

     0     2     0     2     0
Run Code Online (Sandbox Code Playgroud)

现在考虑以下内容:

z = logical([0 0 0 0 0])
z(y) = x(y) + y(y)  
Run Code Online (Sandbox Code Playgroud)

再次,第一个加数是,第二个是合乎逻辑的.他们再次受到双重待遇.但这z合乎逻辑的,所以实际上双重结果被转换为逻辑.

z =

     0     1     0     1     0
Run Code Online (Sandbox Code Playgroud)