Reputation: 2811
if i have an initial array A of twenty numbers in the order 1 to 20,
A = [1,2,3,4,5,...,20]
and have another random array B:
B = [1, 15, 3, 20, 7]
and want to output a column vector C of the form
C = [1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1]
Note that C has a 1 at the indices at which B has a value.
I have tried the following:
n=20;
C = zeros(n, 1);
for i=1:length(B)
C(B(i))=1;
end
Upvotes: 3
Views: 572
Reputation: 11168
in a one-liner:
full(sparse(B,1,1,max(B),1))
and you could also drop the full function, most matlab matrix operation can deal with sparse matrices. But of course it depends on what you actually want to do.
Upvotes: 2
Reputation: 20915
Here is a vectorized solution:
Firstly, initialize C
C = zeros( max(B),1);
Then use array indexing:
C(B) = 1;
Upvotes: 1