Сравните два элемента массива ячеек в Matlab

Я пытаюсь сравнить две ячейки, 1x160 (а) и 80x1(б). Мои массивы ячеек состоят из ячеек, в которых есть несколько строк. Я хочу сравнить каждую строку и посмотреть, равны ли они, а затем, если они равны, вставить в новый массив или вставить 0 в противном случае. Я не могу найти какую-либо функцию для этого. Я пробовал 'isequal','strfind' и другие. Все они дают мне следующее сообщение об ошибке:

Если какой-либо из входных аргументов является массивом ячеек, первый должен быть массивом строк, а второй - массивом символов.

Вот мой код!

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

1 ответ

Решение

Есть много способов сравнить массивы символов, один из которых strcmp,

Мы будем использовать cellfun а также, чтобы избежать зацикливания.

a = {'Dude', 'I', 'am', 'a', 'moose'};
b = {'Well', 'I', 'am', 'a', 'mouse'};

index = cellfun(@strcmp, a, b);

Это будет сравнивать каждый элемент a против соответствующего элемента в b, возвращая логический массив index то есть 1 когда элементы совпадают и 0 когда они этого не делают.

Используйте это, чтобы назначить совпадающие значения:

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

int =

[] 'Я' 'Я' 'a' []

Вы можете расширить эту концепцию, чтобы найти заданное пересечение, если хотите.

Другие вопросы по тегам