How to find a difference between two cell arrays containing vectors?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Aleksandar Milakovic
le 19 Juil 2015
Commenté : Star Strider
le 20 Juil 2015
I have two cell arrays of unequal size containing vectors:
A={[1 1], [1 2], [1 3], [1 4]}
and
B={[1 1], [1 7], [1 3], [1 8], [1,5], [1,6]}
I want to substract A from B resulting in cell array C which will contain vectors which are NOT in both A and B. In this case wanted result would look like:
C={[1 2], [1 4], [1 5], [1 6], [1 7]}
Also, it would be good if vectors in C would be oredered in ascending order (as presented in this example).
I have tried using setdiff function but was getting error message: "Input A of class cell and input B of class cell must be cell arrays of strings, unless one is a string."
Any ideas on how to solve this?
Many thanks
2 commentaires
Réponse acceptée
Star Strider
le 19 Juil 2015
This seems to work:
A={[1 1], [1 2], [1 3], [1 4]};
B={[1 1], [1 7], [1 3], [1 8], [1,5], [1,6]};
Ad = cell2mat(A');
Bd = cell2mat(B');
C{:} = setdiff(union(Bd, Ad, 'rows'), intersect(Bd,Ad,'rows'), 'rows');
The ‘C{:}’ assignment creates a cell array out of the final operation. (Note that your description of ‘C’ omitted the vector [1 8], that appears to meet the criteria.)
2 commentaires
Plus de réponses (1)
Jan
le 19 Juil 2015
A = {[1 1], [1 2], [1 3], [1 4]};
B = {[1 1], [1 7], [1 3], [1 8], [1,5], [1,6]};
Ad = cat(1, A{:});
Bd = cat(1, B{:});
C = setxor(Ad, Bd, 'rows')
But here [1,8] is member of C. Is this wanted? If not, please explain exactly which elements should be included in the result.
Voir également
Catégories
En savoir plus sur Cell Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!