Find where two cell arrays of different sizes are equal
10 次查看(过去 30 天)
显示 更早的评论
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?
2 个评论
Stephen23
2020-9-22
编辑:Stephen23
2020-9-22
"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
采纳的回答
Ameer Hamza
2020-9-22
编辑:Ameer Hamza
2020-9-22
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 个评论
Ameer Hamza
2020-9-22
Yes, that is the power of MATLAB vectorization. Most of the things can be done without loops.
I am glad to be of help!
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!