【问题标题】:Matlab error - Operands to the || and && operators must be convertible to logical scalar values [closed]Matlab 错误 - || 的操作数和 && 运算符必须可转换为逻辑标量值
【发布时间】:2020-06-08 01:39:19
【问题描述】:
whitePixels=ext_rows((150<ext_rows) && (ext_rows<200));
numberWhitePixels=numel(whitePixels);

error : || 的操作数和 && 运算符必须可转换为逻辑标量值。

我该如何解决这个错误?你能在这里写下正确的代码吗?

【问题讨论】:

    标签: matlab operands


    【解决方案1】:

    假设ext_rows 是一个数值数组,您想使用&amp;| 而不是&amp;&amp;||

    后者仅适用于单个(标量)逻辑值,其目的是跳过代码中不必要的逻辑检查。有关更多信息,请参阅help page for short circuits。如果您的数组非常大,请考虑使用anyExceed

    要了解您的示例为什么需要第一组运算符,请创建一个变量来指示 ext_rows 是否大于 150。然后我们检查它是否既是逻辑又是标量。

    # note: I would consider rewriting it as ext_rows > 150 for readability
    over150 = 150 < ext_rows; 
    islogical(over150) # true
    isscalar(over150) # false
    

    请注意,第二次调用为 false,因为 over150 是一个逻辑数组,指示每个元素是否大于 150。如果 ext_rows 小于 200,则同样如此。

    under200 = ext_rows < 200;
    islogical(under200) # passes
    isscalar(under200) # fails
    

    使用上面的内容,这基本上是您最初所拥有的,但现在使用 &amp; 来获取范围内所有元素的索引,为我们提供了以下内容:

    idxWhitePixels = over150 & under200;
    whitePixels = ext_rows(idxWhitePixels);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-11
      • 2023-04-07
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 2014-09-25
      相关资源
      最近更新 更多