为什么Matlab会因逻辑乘法而返回double?

时间:2017-11-24 11:42:41

标签: matlab logical-operators

Matlab为逻辑乘法返回double是否正常?

A=[true false];
B=[false true];
class(A.*B)

输出

ans =
double

我找到的最佳方式是演员:logical(A.*B),但我觉得它不干净。

2 个答案:

答案 0 :(得分:2)

在许多语言(包括Matlab)中,boolean type(在Matlab中称为logical)不是数字类型,即使它具有基础数字类型(就像所有其他类型一样)。它的基础数字类型只是byte(Matlab中的uint8),其可能的值被约束为01

在大多数编程语言中,当您尝试在布尔值之间执行算术运算时,编译器会抛出一个错误,告诉您它不可能。相反,Matlab在继续计算之前执行logicalsdouble的隐式转换,让你继续前进:

A = [true false]; => A = [1 0];
B = [false true]; => A = [0 1];
ans = A .* B;

whos ans => double

这就是您的结果类型为double的原因。

实际上,如果你想用logicals执行操作,坚持logical返回类型......你必须使用逻辑运算符。有关详细信息:https://mathworks.com/help/matlab/logical-operations.html

实际上,您的结果可以通过以下方式在logical域中实现:

res = A & B;

答案 1 :(得分:0)

我找到了!它只是A&B

>> A&B
ans =
     0     0

>> class(ans)
ans =
     logical