【问题标题】:Why does Matlab returns double as result of logical multiplication?为什么 Matlab 会返回 double 作为逻辑乘法的结果?
【发布时间】:2018-05-08 10:17:07
【问题描述】:

Matlab 作为逻辑乘法的结果返回一个双精度值是否正常?

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

输出是

ans =
double

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

【问题讨论】:

  • 只需使用logical operators,在本例中为&&&,具体取决于输入。您也不需要通过强制转换10 创建逻辑向量,而是使用truefalse。例如A = [true false],或A = true(1, 2)
  • 谢谢,我将编辑我的问题以使其更清晰
  • 您应该阅读this Q&A。您将逻辑数组与算术运算混合在一起,这在许多情况下都有效,因为 Matlab 进行了内部类型器转换。但是,在某些情况下您会遇到问题。

标签: matlab logical-operators


【解决方案1】:

在许多语言(包括 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 返回类型……你必须使用逻辑运算符。更多详情:https://mathworks.com/help/matlab/logical-operations.html

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

res = A & B;

【讨论】:

    【解决方案2】:

    我找到了!简直就是A&B

    >> A&B
    ans =
         0     0
    
    >> class(ans)
    ans =
         logical
    

    【讨论】:

      猜你喜欢
      • 2022-11-29
      • 2017-07-27
      • 1970-01-01
      • 2011-07-22
      • 2019-09-10
      • 2019-05-19
      • 2020-02-28
      • 2017-07-07
      • 2021-12-19
      相关资源
      最近更新 更多