Sermilion
Sermilion

Reputation: 2049

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

Upvotes: 2

Views: 32475

Answers (1)

nicktruesdale
nicktruesdale

Reputation: 815

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.

Upvotes: 8

Related Questions