Search code examples
matlabcell-array

Compare two cell array elements in matlab


I am trying to compare two cell arrays, 1x160 (a) and 80x1(b). My cell arrays consist of cells which have a number of strings inside. I wanna compare each string ans see if they are equal, then if they are equal, insert to new array, or insert 0 otherwise. I can't find any function for that. I tried 'isequal','strfind' and others. All of them give me next error message:

If any of the input arguments are cell arrays, the first must be a cell array of strings and the second must be a character array.

Here is my code!

function [inter]=Intersect2(a,b)
int=cell(0);
b2=[b;b];

for i=1:length(a)   
    if a{i,1}==b2{i,1}(1) ( or 'isequal','strfind')
       int{i}=a{i};
    else
        int{i}=0;
    end     
end

Solution

  • There are many ways to compare character arrays, one of which is strcmp.

    We'll use cellfun as well to avoid looping.

    a = {'Dude', 'I', 'am', 'a', 'moose'};
    b = {'Well', 'I', 'am', 'a', 'mouse'};
    
    index = cellfun(@strcmp, a, b);
    

    This will compare each element of a against the corresponding element in b, returning a logical array index that is 1 when the elements match and 0 when they do not.

    Use this to assign matching values:

    int = cell(1, length(a));
    int(index) = a(index);
    

    int =

    [] 'I' 'am' 'a' []

    You can extend this concept to find the set intersection if you wish.