Сравните два элемента массива ячеек в 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' []
Вы можете расширить эту концепцию, чтобы найти заданное пересечение, если хотите.