Compare two cell array elements in matlab

29,360

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.

Share:
29,360
Sermilion
Author by

Sermilion

I am a Senior Android Developer at Reddit. Love Kotlin and make Metal music. Spotify: https://open.spotify.com/artist/2mtWWF3BptPowF3e1lKlZm?si=DaCZwjfPQ_uC-5zxA2kkpA

Updated on July 09, 2022

Comments

  • Sermilion
    Sermilion almost 2 years

    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