Ho un semplice problema che sto cercando un'implementazione veloce in Matlab. Ho una matrice di valori, diciamo:Operandi per || e gli operatori && devono essere convertibili in valori scalari logici
a = floor(rand(5,5).*255)
Poi hanno una matrice soglia di dimensioni simili, diciamo è:
a_thresh = floor(rand(5,5).*255)
Per valori all'interno a
se sono 0,5x minore della corrispondente valore nel a_thresh
voglio l'uscita sia 0 - allo stesso modo per il valore 1,2x in a_thresh
dovrebbe essere impostato a zero, vale a dire :
a(a < a_thresh.*0.4) = 0
a(a > a_thresh.*1.2) = 0
Per valori compresi tra 0,4x e 0,5x e 1,0x e 1,2x, desidero un valore proporzionale e inoltre, dove tra 0,5 e 1,0, non viene modificato il valore di a
. Ho pensato che avrei potuto usare qualcosa come il seguente:
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;
Tuttavia, ottengo un errore che dice:
Operandi a || e & & operazioni devono essere convertibile in scalare logica valori
Qualche consiglio su come risolvere questo problema? Ovviamente potrei usare loop per farlo e sarebbe banale, ma voglio mantenere il codice vettorializzato.
Fantastico - che affronta il problema &/&& - Io un po 'come non lo sapevo, grazie! Ora ho un piccolo problema che il numero di elementi a destra è diverso da sinistra. C'è un modo intelligente per risolvere questo? – trican
@trican L'ho risolto, si prega di consultare l'aggiornamento. –
Molte, molte grazie Eitan - la tua soluzione funziona perfettamente - ed è abbastanza generale che posso vedere come posso usarla altrove nel mio lavoro con Matlab – trican