Compare two cell array elements in matlab
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.
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, 2022Comments
-
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