为什么 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
),其可能的值被限制为 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
return 类型...您必须使用逻辑运算符。更多详情:https://mathworks.com/help/matlab/logical-operations.html
实际上,您的结果可以通过以下方式留在 logical
域中:
res = A & B;
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
),其可能的值被限制为 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
return 类型...您必须使用逻辑运算符。更多详情:https://mathworks.com/help/matlab/logical-operations.html
实际上,您的结果可以通过以下方式留在 logical
域中:
res = A & B;