Matlab为逻辑乘法返回double是否正常?
A=[true false];
B=[false true];
class(A.*B)
输出
ans =
double
我找到的最佳方式是演员:logical(A.*B)
,但我觉得它不干净。
答案 0 :(得分:2)
在许多语言(包括Matlab)中,boolean type
(在Matlab中称为logical
)不是数字类型,即使它具有基础数字类型(就像所有其他类型一样)。它的基础数字类型只是byte
(Matlab中的uint8
),其可能的值被约束为0
和1
。
在大多数编程语言中,当您尝试在布尔值之间执行算术运算时,编译器会抛出一个错误,告诉您它不可能。相反,Matlab在继续计算之前执行logicals
到double
的隐式转换,让你继续前进:
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