【发布时间】:2020-06-08 01:39:19
【问题描述】:
whitePixels=ext_rows((150<ext_rows) && (ext_rows<200));
numberWhitePixels=numel(whitePixels);
error : || 的操作数和 && 运算符必须可转换为逻辑标量值。
我该如何解决这个错误?你能在这里写下正确的代码吗?
【问题讨论】:
whitePixels=ext_rows((150<ext_rows) && (ext_rows<200));
numberWhitePixels=numel(whitePixels);
error : || 的操作数和 && 运算符必须可转换为逻辑标量值。
我该如何解决这个错误?你能在这里写下正确的代码吗?
【问题讨论】:
假设ext_rows 是一个数值数组,您想使用& 和| 而不是&& 和||。
后者仅适用于单个(标量)逻辑值,其目的是跳过代码中不必要的逻辑检查。有关更多信息,请参阅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
使用上面的内容,这基本上是您最初所拥有的,但现在使用 & 来获取范围内所有元素的索引,为我们提供了以下内容:
idxWhitePixels = over150 & under200;
whitePixels = ext_rows(idxWhitePixels);
【讨论】: