# Find where two cell arrays of different sizes are equal

14 views (last 30 days)
Camille Woicekowski on 22 Sep 2020
I have two cell arrays of different sizes filled with chars. I want to loop through and find the indices of one cell where the char values are equal to each other.
for example,
cell1={'cat','dog','pig','cow','goat'}
cell2={'meow','cat','bark','goat'}
should return 1 and 5 if I loop through cell one.
If these were doubles, I would use
for i=1:size(cell1,2)
ind=find(cell2==cell1(1,i))
end
but with these variable types I'm having some trouble.
cell2{1,2}==cell1{1,1}
return the logcial True but
find(cell2==cell1{1,1})
returns the error message "Operator == is not supported for opperands type cell". I also tried using cellfun(@isequal, cell1, cell2) but I get an error message because the size and shape of my cells are not equal.
How can I get the desired result using these variable types?
Stephen23 on 22 Sep 2020
Edited: Stephen23 on 22 Sep 2020
"If these were doubles, I would use"
for i=1:size(cell1,2)
ind=find(cell2==cell1(1,i))
end
The MATLAB approach would be to use ismember, e.g.:
>> A = [99,100,112,111,103];
>> B = [109,99,98,103];
>> find(ismember(A,B))
ans =
1 5
Which also works for cell arrays of character vectors:
>> A = {'cat','dog','pig','cow','goat'};
>> B = {'meow','cat','bark','goat'};
>> find(ismember(A,B))
ans =
1 5
Camille Woicekowski on 22 Sep 2020
Wow, can you tell I learned Python first? Matlab has been all self-taught for me. This is really helpful, thank you!

Ameer Hamza on 22 Sep 2020
Edited: Ameer Hamza on 22 Sep 2020
To compare char arrays, strcmp() should be used. However, since you are using the lastest version of MATLAB, so there are easier ways
cell1={'cat','dog','pig','cow','goat'};
cell2={'meow','cat','bark','goat'};
idx = find(any(string(cell1) == string(cell2).'));
Result
>> idx
idx =
1 5
##### 3 CommentsShow 1 older commentHide 1 older comment
Ameer Hamza on 22 Sep 2020
Yes, that is the power of MATLAB vectorization. Most of the things can be done without loops.
I am glad to be of help!
per isakson on 22 Sep 2020
... or
find( ismember( cell1, cell2 ) )

### Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

R2020a

### Community Treasure Hunt

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

Start Hunting!