how to compare cell arrays of different lengths?

11 views (last 30 days)
clc;clear; a=int64(1:3)'; out=num2cell(a) b = int64(1:4)'; out2 =num2cell(b)
index = out == out2;
index doesn't compute because out and out2 are of different lengths. How to make it work?
  1 Comment
Sven on 19 Apr 2016
What would you like the actual answer to be?
For example, the statement
index = out == out2
is definitely not true, so do you want index to return false? Or do you want to know which of the cells in out are equal to their equivalent index in out2?

Sign in to comment.

Accepted Answer

Sven on 19 Apr 2016
We can start with your input
a = int64(1:3)';
out = num2cell(a);
b = int64(1:4)';
out2 =num2cell(b);
We will presume you're looking for something that tells you that "the contents of indexes 1, 2, and 3 match between the two cells", so you're looking for index to return the values 1, 2, and 3.
You have a 3-length and a 4-length cell array. By definition the 4th cell element can't match anything, so we only need to consider up to the smallest array length.
minLen = min(length(out),length(out2));
We can then use cellfun() to compare each pair of elements:
index = find(cellfun(@isequal, out(1:minLen), out2(1:minLen)))
Note that you didn't necessarily need to put integers into cells to do this. Perhaps your real data contains strings or other non-numeric contents, but if you're working with arrays originally you can do the same thing with the raw array contents:
index = find(arrayfun(@isequal, a(1:minLen), b(1:minLen)))
Did this help you out?
Thanks, Sven

More Answers (0)

Community Treasure Hunt

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

Start Hunting!