Use one matrix to change values of another

1 view (last 30 days)
I have two matrices, A and B which are something like:
A = [1; 2; 3; 4; 16; 17; 18; 19 ....] (not a repeating formula just numbers from 1 to 8976 with a lot missing in between)
B = [1 2 3 4 8 9 10 11; 1 2 5 6 7 8 16 17; 3 4 5 6 18 19 20 21]
I want to make it so that the numbers in B that are not in A are change to 0, so that B would look like
[1 2 3 4 0 0 0 0; 1 2 0 0 0 0 16 17; 3 4 0 0 18 19 0 0]

Accepted Answer

Stephen23
Stephen23 on 4 Jul 2019
Edited: Stephen23 on 4 Jul 2019
Method one: indexing:
>> X = ismember(B,A)
>> B(~X) = 0
B =
1 2 3 4 0 0 0 0
1 2 0 0 0 0 16 17
3 4 0 0 18 19 0 0
Method two: multiplication:
>> X = ismember(B,A)
>> B = B.*X
B =
1 2 3 4 0 0 0 0
1 2 0 0 0 0 16 17
3 4 0 0 18 19 0 0

More Answers (1)

Guillaume
Guillaume on 4 Jul 2019
Edited: Guillaume on 4 Jul 2019
Simply:
B(~ismember(B, A)) == 0

Tags

Community Treasure Hunt

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

Start Hunting!