In Matlab I can find all non zero entries in a vector like this:
>> v = [0 1 0 0 1]
v =
0 1 0 0 1
>> indices = find(v)
i
i used to use sparse and full but now i switched to accumarray, because it has simpler format.
in your example:
v=accumarray([2;5],1)'
additionally, you can also cycle values (i think), according to the first matlab example:
Create a 5-by-1 vector, summing values for repeated 1-D subscripts:
subs = [1; 2; 4; 2; 4];
A = accumarray(subs, 101:105)
of course, according to its name, this function is built to do fancier things.
you have to know what the shape v
is (i.e. how long v
is if it's a vector as in your example), but once you know that it's trivial:
n = 5;
v_reconstructed = zeros(1, n);
v_reconstructed(indices) = 1;
if you don't know how long v
is then you won't capture any 0
s after the last 1
in v
...
BTW if you are working with sparse matrices then you might want this actually:
v = sparse([0 1 0 0 1]);
v_reconstructed = full(v);