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 comentario

Bruno Luong
Bruno Luong el 15 de Dic. de 2018
so in the above example the result should be FALSE right?

Iniciar sesión para comentar.

 Respuesta aceptada

Bruno Luong
Bruno Luong el 15 de Dic. de 2018
[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 comentarios

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'.
Bruno Luong
Bruno Luong el 16 de Dic. de 2018
Editada: Bruno Luong el 16 de Dic. de 2018
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
Prasanna Venkatesh
Prasanna Venkatesh el 16 de Dic. de 2018
Thanks Bruno Luong !

Iniciar sesión para comentar.

Más respuestas (1)

madhan ravi
madhan ravi el 15 de Dic. de 2018
Editada: madhan ravi el 15 de Dic. de 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 comentario

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'.

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by