Tengo un vector y de longitud n. y (i) es un número entero en 1..m. ¿Hay una manera más sencilla de convertir y en una matriz lógica ny m yy, donde yy (i, j) = 1 si y (i) = j, pero 0 en caso contrario? Así es como he estado haciendo:¿Convertir vector en matriz lógica?
% 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);
He encontrado otra manera ... no estoy seguro de si esto es mejor ... pero al menos cabe en una línea: yy = repmat (y, 1, m) == repmat (1: m, n, 1); – notrick
'bsxfun' es una de las funciones multiproceso de Matlab. Por lo tanto, es probable que sea más rápido que sus soluciones. – Jonas