Searching and Manipulating Cell Array

I have a cell array A:
[3,2]
[2,4]
[4,5]
[2,5]
[6]
and cell array B:
[2,3,4]
[2,5]
[4,5,6]
In the array B I can see that [2,3,4] is made of union of [3,2] and [2,4] from A. [2,5] in B is made from union of only [2,5] from A. [4,5,6] in B is made of [4,5] and [6] in A.
So, I want to find the index of elements in A union of which make each array element of B. How do I do this?
Thanks guys

2 commentaires

Azzi Abdelmalek
Azzi Abdelmalek le 19 Oct 2012
what are the sizes of elments in B? can they be >3. The same question about A
Sam Da
Sam Da le 19 Oct 2012
Yes they can be of any length. Thanks for interest. I think Matt's code already works for a general case. But if you have a simpler solution please do post.

Connectez-vous pour commenter.

 Réponse acceptée

Matt J
Matt J le 19 Oct 2012
Modifié(e) : Matt J le 19 Oct 2012
subsetmap=false(length(A), length(B));
for bb=1:length(B)
for aa=1:length(A)
subsetmap(aa,bb) = all(ismember(A{aa},B{bb}));
end
end
%this next line is unnecessary if logical indexing is sufficient
indices=arrayfun(@(col) find(subsetmap(:,col)),1:length(B),'uni',0);

3 commentaires

Sam Da
Sam Da le 19 Oct 2012
Thanks for quick reply. But can I make it so that it can consider union of more than 2 elements in A. i.e. there can be an element in B which is made of 1,2,3,4 all the way up to all elements of A.
Matt J
Matt J le 19 Oct 2012
Yes. My code already does that.
Matt J
Matt J le 19 Oct 2012
By the way. My code doesn't check to see whether all B{i} can actually be formed from the union of some A{j}. It only works if this is already the case. I leave it to you to add the appropriate error checks.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by