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?