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

时间:2013-04-18 10:11:22

标签: matlab logical-operators

我有一个简单的问题,我正在寻找Matlab中的快速实现。我有一系列的值,让我们说:

 a = floor(rand(5,5).*255)

然后我有一个类似大小的阈值数组,让我们说它是:

a_thresh = floor(rand(5,5).*255)

对于a内的值,如果它们比a_thresh中的相应值小0.5倍,我希望输出为0 - 同样对于1.2x,a_thresh中的值也应该是设为零,

a(a < a_thresh.*0.4) = 0
a(a > a_thresh.*1.2) = 0

对于介于0.4x和0.5x以及1.0x和1.2x之间的值,我想要一个比例量,否则在0.5到1.0之间我希望使用a的值不变。我以为我可以使用以下内容:

 a(a>= a_thresh .* 0.4 && a <a_thresh.* 0.5) = ((a - a_thresh.*0.4)/(a_thresh.*0.5 a_thresh.*0.4)) .* a;

但是,我收到一条错误消息:

  

操作数到||和&amp;&amp;操作必须可转换为逻辑标量值

有关如何解决此问题的任何建议?显然我可以使用循环来做到这一点,这将是微不足道的,但我想保持代码矢量化。

1 个答案:

答案 0 :(得分:14)

关于&&的问题是它只能在标量上运行,而&也可以在数组上运行。您应该将&&更改为&以使其有效(您可以在this question中详细了解它。)

<强>更新
关于评论中描述的第二个问题:左侧的元素数量不同,因为您使用的是索引(仅选择某些元素),右侧则使用整个矩阵a和{ {1}}。

你需要在两边都使用索引,所以我建议将它存储在一个变量中,然后将它作为数组下标用于这些行:

a_thresh

我不确定计算本身是否正确,所以我会留给你检查。