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

Matlab | |和&;的操作数&;运算符必须可转换为逻辑标量值,matlab,logical-operators,Matlab,Logical Operators,我有一个简单的问题,我正在寻找一个在Matlab中快速实现。我有一个值数组,比如: a = floor(rand(5,5).*255) 然后我有一个大小相似的阈值数组,假设它是: a_thresh = floor(rand(5,5).*255) 对于a中的值,如果它们比a_thresh中的相应值小0.5倍,我希望输出为0-同样,对于1.2倍,a_thresh中的值也应设置为零,即: 但是,我得到一个错误,它说: | |和&&运算的操作数必须可转换为逻辑标量值 关于如何解决这个问题有什么建议

我有一个简单的问题,我正在寻找一个在Matlab中快速实现。我有一个值数组,比如:

 a = floor(rand(5,5).*255)
然后我有一个大小相似的阈值数组,假设它是:

a_thresh = floor(rand(5,5).*255)
对于
a
中的值,如果它们比
a_thresh
中的相应值小0.5倍,我希望输出为0-同样,对于1.2倍,
a_thresh
中的值也应设置为零,即:

但是,我得到一个错误,它说:

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


关于如何解决这个问题有什么建议吗?显然,我可以使用循环来实现这一点,这很简单,但我想保持代码的矢量化。

关于
&&
的事情是它只能在标量上运行,而
&
也可以在数组上运行。您应该将
&
更改为
&
,以使其正常工作(您可以在中阅读有关它的更多信息)

更新:
关于评论中描述的第二个问题:左侧的元素数量不同,因为您使用的是索引(仅选择某些元素),而右侧的元素使用的是整个矩阵
a
a\u thresh

您需要在两侧使用索引,因此我建议将其存储在变量中,然后将其用作数组下标,大致如下:

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

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

太棒了-这解决了&/&&问题-我怎么不知道,谢谢!现在我有一个小问题,右边的元素数和左边的不同。有没有一个聪明的方法来解决这个问题呢?非常非常感谢Eitan-你的解决方案工作得非常好-而且非常通用,我可以看到我如何在我的Matlab工作中使用它
 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;
idx = (a >= a_thresh*0.4 & a < a_thresh*0.5);
a(idx) = ((a(idx)-a_thresh(idx)*0.4) ./ (a_thresh(idx)*0.5*a_thresh(idx)*0.4)) .* a(idx);