How to find a difference between two cell arrays containing vectors?
1 view (last 30 days)
Show older comments
Aleksandar Milakovic
on 19 Jul 2015
Commented: Star Strider
on 20 Jul 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 Comments
Accepted Answer
Star Strider
on 19 Jul 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 Comments
More Answers (1)
Jan
on 19 Jul 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.
See Also
Categories
Find more on Cell Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!