У меня простая проблема, я ищу быструю реализацию в Matlab. У меня есть массив значений, скажем:
a = floor(rand(5,5).*255)
Затем у меня есть пороговый массив аналогичного размера, скажем, это:
a_thresh = floor(rand(5,5).*255)
Для значений в a
, если они на 0,5x меньше, чем соответствующее значение в a_thresh
, я хочу, чтобы результат был 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;
Однако я получаю сообщение об ошибке:
Операнды к || и && операции должны быть преобразованы в логические скалярные значения
Есть какие-нибудь советы, как это решить? Очевидно, я мог бы использовать для этого циклы, и это было бы тривиально, но я хочу сохранить векторизованный код.