nyxee
nyxee

Reputation: 2811

binary array in MATLAB

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

Answers (3)

Amro
Amro

Reputation: 124553

Another one-liner:

C = accumarray(B(:), 1, [], @(x)1)

Upvotes: 2

Gunther Struyf
Gunther Struyf

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

Andrey Rubshtein
Andrey Rubshtein

Reputation: 20915

Here is a vectorized solution:

Firstly, initialize C

   C = zeros( max(B),1);

Then use array indexing:

   C(B) = 1;

Upvotes: 1

Related Questions