2012-05-19 17 views
5

I tienen un vector -dimensional de enteros de 1 a nm. Estos enteros son índices de columna para m × n matriz.Creación de una matriz m por n de 0s y 1s de-m de tamaño vector de índices de columnas

I desea crear un m × n matriz de 0s y 1s, donde en m fila -ésimo hay un 1 en la columna que se especifica por m valor -ésimo en mi vector.

Ejemplo:

% my vector (3-dimensional, values from 1 to 4): 
v = [4; 
    1; 
    2]; 

% corresponding 3 × 4 matrix 
M = [0 0 0 1; 
    1 0 0 0; 
    0 1 0 0]; 

Es esto posible sin un bucle de?

Respuesta

4

Por supuesto, es por eso que inventaron sparse matrices:

>> M = sparse(1:length(v),v,ones(length(v),1)) 
M = 

    (2,1)  1 
    (3,2)  1 
    (1,4)  1 

que se puede convertir en una matriz completa si lo desea con full:

>> full(M) 
ans = 

    0  0  0  1 
    1  0  0  0 
    0  1  0  0 
3

o sin matriz dispersa:

>> M = zeros(max(v),length(v)); 
>> M(v'+[0:size(M,2)-1]*size(M,1)) = 1; 
>> M = M' 

M = 

0  0  0  1 
1  0  0  0 
0  1  0  0 

La transposición se utiliza porque en las matrices de matlab son abordados por columnas

3

En Octave, al menos a partir de 3.6.3, puede hacerlo fácilmente utilizando la radiodifusión:

M = v==1:4 
Cuestiones relacionadas