Mam prosty problem, że szukam szybkiego wdrożenia w Matlab. Mam tablicę wartości, powiedzmy:Operandy do || i && operatory muszą być wymienialne na logiczne wartości skalarne
a = floor(rand(5,5).*255)
Mam następnie podobnie wielkości tablicę progowej, powiedzmy to:
a_thresh = floor(rand(5,5).*255)
Dla wartości w a
jeśli są 0,5x mniejszy niż odpowiadający wartość w a_thresh
Chcę być wyjście 0 - podobnie do 1,2x wartość w a_thresh
powinny być również ustawiony na zero, tj:
a(a < a_thresh.*0.4) = 0
a(a > a_thresh.*1.2) = 0
Dla wartości między 0,4x a 0,5x i 1,0x i 1,2x chcę proporcjonalnej kwoty, a gdzie indziej od 0,5 do 1,0 chcę używać niezmienionej wartości a
. Myślałem, że mogę używać coś jak następuje:
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;
Jednakże pojawia się błąd, który mówi:
operandy do || i & & operacje muszą być wymienialne na logicznej skalarne wartości
Wszelkie porady, w jaki sposób rozwiązać ten problem? Oczywiście mogłem użyć pętli, aby to zrobić i byłoby to banalne, ale chcę zachować wektoryzację kodu.
Fantastyczne - to dotyczy problemu && && - I jak się tego nie dowiedziałam, dzięki! Teraz mam mały problem, że liczba elementów po prawej stronie różni się od lewej. Czy istnieje inteligentny sposób naprawienia tego? – trican
@trican Zrobiłem to, proszę zobaczyć aktualizację. –
Wiele, wiele dzięki Eitan - twoje rozwiązanie działa idealnie - i jest wystarczająco ogólne, że mogę zobaczyć, jak mogę go używać gdzie indziej w mojej pracy Matlaba – trican