How to merge two different size matrix logically?

1 view (last 30 days)
Hello everyone, i have one matrix A = [0,1,2,...3600] and another one is B=[2,5,7,3600] what i want is to have matrix C(:,1)=[0,1,2....,3600] C(:,2)=[0,0,2,0,0,5,....3600] it should be as same size as A and if elements of B exist in A and that should be in the second column of C and the rest will be zero. Can you help please?

Accepted Answer

Thorsten
Thorsten on 25 Feb 2015
Edited: Thorsten on 25 Feb 2015
Like this?
A = [0, 1, 2, 3, 4, 5, 7, 10];
B = [2, 5, 7];
C(:,1) = A;
C(end,2) = 0;
% ind = arrayfun(@(x)(find(x==A)), B);
% or
ind = find(ismember(A,B))
C(ind,2) = A(ind);
  1 Comment
Cladio Andrea
Cladio Andrea on 25 Feb 2015
Edited: Cladio Andrea on 25 Feb 2015
Hi Thorsten i have one more question, i would be very glad if you can answer, lets say now i need another matrix D lets say that counts the number of occurrence of the ones inside B matrix and then insert in the same size matrix let say:
A = [0, 1, 2, 3, 4, 5, 7, 10];
B = [2, 5, 7];
you found :
C = [0,0,2,0,0,5,7,0]; but in that case what i want is the occurence:
D = [0,0,1,0,0,1,1,0]
lets say i have something
A = [0, 1, 2, 3, 4, 5, 7, 10];
B = [2,5,5,7];
still C is the same but i want D also which should be:
C = [0,0,2,0,0,5,7,0];
D = [0,0,1,0,0,2,1,0];
<do you know how to solve that, thank you in advance

Sign in to comment.

More Answers (2)

dpb
dpb on 25 Feb 2015
C=[A zeros(size(A)]; % allocate
C(ismember(A,B),2)=B; % merge by position

Cladio Andrea
Cladio Andrea on 25 Feb 2015
i love you guys!! i was dealing with that problem for hours and now i have 2 perfect answers!!!! Thank you so much!!!

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!