Creating an m by n matrix of 0s and 1s from m-sized vector of column indexes

matlab, matrix, octave

Solution

Of course, that's why they invented sparse matrices:

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

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

which you can convert to a full matrix if you want with full:

>> full(M)
ans =

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

Problem

I have a m-dimensional vector of integers ranging from 1 to n. These integers are column indexes for m × n matrix. I want to create a m × n matrix of 0s and 1s, where in m-th row there's a 1 in the column that is specified by m-th value in my vector. Example: ``` % 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]; ``` Is this possible without a for-loop?

Original source