为什么 Matlab returns 作为逻辑乘法的结果加倍?

Why does Matlab returns double as result of logical multiplication?

Matlab returns 逻辑乘法的结果为双精度是否正常?

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

输出是

ans =
double

我找到的最好的方法是强制转换:logical(A.*B),但我觉得它不干净。

我找到了!就是 A&B

>> A&B
ans =
     0     0

>> class(ans)
ans =
     logical

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

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

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

whos ans => double

这就是为什么您的结果类型是 double

实际上,如果您想使用 logicals 执行运算,请坚持使用 logical return 类型...您必须使用逻辑运算符。更多详情:https://mathworks.com/help/matlab/logical-operations.html

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

res = A & B;