Ho un vettore y di lunghezza n. y (i) è un numero intero in 1..m. Esiste un modo più semplice per convertire y in una matrice logica n x m yy, dove yy (i, j) = 1 se y (i) = j, ma 0 altrimenti? Ecco come ho fatto esso:Converti vettore in matrice logica?
% If m is known (m = 3 here), you could write it out all at once
yy = [y == 1; y== 2; y == 3];
yy = reshape(yy, n, 3);
o
% if m is not known ahead of time
yy = [ y == 1 ];
for i = 2:m;
yy = [ yy; y == i ];
end
yy = reshape(yy, n, m);
Ho trovato un altro modo ... non sono sicuro che sia meglio ... ma almeno si adatta su una riga: yy = repmat (y, 1, m) == repmat (1: m, n, 1); – notrick
'bsxfun' è tra le funzioni Matlab multithreaded. Quindi è probabile che sia più veloce delle tue soluzioni. – Jonas