我有一个简单的问题,我正在寻找一个快速的Matlab实现。我有值的数组,让我们说:||的操作数和&&操作符必须可以转换为逻辑标量值
a = floor(rand(5,5).*255)
然后我有一个类似大小的预定值排列,让我们说这是:
a_thresh = floor(rand(5,5).*255)
对于内a
值,如果它们比相应的0.5倍小在a_thresh
值我想要的输出为0 - 为1.2倍同样在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;
不过,我得到一个错误,指出:
操作数||和& &操作必须转换为逻辑标量值
如何解决这个有什么建议?很明显,我可以使用循环来做到这一点,这将是微不足道的,但我想保持代码向量化。
太棒了 - 这解决了&/ &&问题 - 我有些怎么也不知道,谢谢!现在我有一个小问题,右侧的元素数量与左侧不同。有没有一种明智的方法来解决这个问题? – trican
@trican我已经完成了,请参阅更新。 –
许多非常感谢Eitan - 您的解决方案完美无瑕 - 显然是一般的,我可以看到我可以在我的Matlab工作中的其他地方使用它 – trican