Finding a vector as a subset of an array

I have
a = [2 2];
b = [2 3];
How to find that 'b' contains all the elements of 'a' i.e. here two 2's. Here 'b' contains only one '2'.

1 Comment

so in the above example the result should be FALSE right?

Sign in to comment.

 Accepted Answer

[u,~,j] = unique(a(:));
[tf,loc] = ismember(b(:),u);
s = [length(u),1];
result = all(accumarray(j(:),1,s) <= accumarray(loc(tf),1,s))

3 Comments

Thanks! But still one more query. Suppose,
a = [2 3 2 5 2];
b = [2 7 2];
I need to find the missing elements of 'a' in 'b'. Here the elements are one '2', one '3' and one '5'.
a = [2 3 2 5 2 7];
b = [2 7 2 6];
% Same as above, juste decomposing for re-user later
[u,~,j] = unique(a(:));
[tf,loc] = ismember(b(:),u);
s = [length(u),1];
n = accumarray(j(:),1,s)-accumarray(loc(tf),1,s);
anotin = n>0;
bcontaina = all(~anotin)
n = n(anotin);
anotin = u(anotin);
anotin = table(anotin, n)
Returns
bcontaina =
logical
0
anotin =
3×2 table
anotin n
______ _
2 1
3 1
5 1
Thanks Bruno Luong !

Sign in to comment.

More Answers (1)

madhan ravi
madhan ravi on 15 Dec 2018
Edited: madhan ravi on 15 Dec 2018
a = [2 2];
b = [2 3];
idx=ismember(b,a);
all(idx) % if zero then b doesn't contain all the elements of a else vice versa

1 Comment

Thanks! But still one more query. Suppose,
a = [2 3 2 5 2];
b = [2 7 2];
I need to find the missing elements of 'a' in 'b'. Here the elements are one '2', one '3' and one '5'.

Sign in to comment.

Categories

Community Treasure Hunt

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

Start Hunting!