Ich habe ein einfaches Problem, dass ich nach einer schnellen Implementierung in Matlab suche. Ich habe ein Array von Werten, sagen wir mal:Operanden zum || und && Operatoren müssen in logische Skalarwerte umgewandelt werden können
a = floor(rand(5,5).*255)
ich dann einen ähnlich großen Schwellenmatrix haben, lassen Sie uns sagen, es ist:
a_thresh = floor(rand(5,5).*255)
Für Werte innerhalb a
wenn sie 0,5x kleiner als die entsprechende sind in a_thresh
Wert mag ich den Ausgang 0 sein - der Wert in a_thresh
in ähnlicher Weise für 1.2x auch auf Null gesetzt werden sollte, dh:
a(a < a_thresh.*0.4) = 0
a(a > a_thresh.*1.2) = 0
Für Werte zwischen 0,4x und 0,5x und 1,0x und 1,2x möchte ich einen proportionalen Betrag und sonst zwischen 0,5 und 1,0 Ich möchte den Wert a
unverändert verwenden. Ich dachte, ich so etwas wie die folgende verwenden:
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;
Allerdings habe ich einen Fehler, der sagt:
Operanden || und & & Operationen müssen konvertierbar logische skalare Werte
Alle Ratschläge, wie dieses Problem zu lösen? Natürlich könnte ich dazu Schleifen verwenden, und das wäre trivial, aber ich möchte den Code vektorisiert halten.
Fantastisch - das behebt die &/&& Problem - ich einige, wie ich das nicht wusste, danke! Jetzt habe ich ein kleines Problem, dass die Anzahl der Elemente auf der rechten Seite von der linken abweicht. Gibt es eine kluge Art, das zu beheben? – trican
@trican Ich habe es ausgearbeitet, siehe das Update. –
Vielen, vielen Dank Eitan - Ihre Lösung funktioniert perfekt - und ist eindeutig allgemein genug, dass ich sehen kann, wie ich es anderswo in meiner Matlab-Arbeit verwenden kann – trican