Сравнение массивов ячеек различных типов в matlab

Предпосылка: Я нашел что-то, что, кажется, связано с моей проблемой, но я не уверен, как использовать ее, таким образом я задаю новый вопрос.

Я имею матрицу клетки, называю ее A, который выглядел бы примерно так:

[ 'натяните' 'натягивают' 'число'

'натяните' 'натягивают' 'число'

...........................]

and I need to compare a cell array I just created, call it B = ['натяните' 'натягивают' 'число'], with matrix A to see if B is already there somwhere. If I try touse ismember, matlab returns an error because an argument is not a string.

Что я должен сделать?

Спасибо за помощь

1
nl ja de

3 ответы

Ваш вопрос немного неясен, таким образом, этот ответ только действителен, если эти предположения:

  • Вы действительно имеете в виду массивы ячеек и не массивы символов в 2-м измерении как ваши фрагменты кода предлагают.
  • Ваши массивы ячеек A и B есть то же самое число элементов в 2-м измерение.

Следующая линия возвратит вектор колонки единиц и нулей, где тот указывает на матч элементов B с рядом в X:

sum(cellfun(@isequal,X,repmat(B,size(X,1),1)),2)==size(X,2)

Краткое объяснение:

  • repmat копирует B к размеру X.
  • cellfun сравнивает каждый элемент в этих двух матрицах.
  • сумма считает количество матчей последовательности в каждом ряду.
  • == проверяет, соответствуют ли все элементы в данном ряду.

Надежда это помогает

2
добавлено
это помогает много на самом деле! Спасибо!
добавлено автор Andy, источник

Ваш вопрос немного неясен, таким образом, этот ответ только действителен, если эти предположения:

  • Вы действительно имеете в виду массивы ячеек и не массивы символов в 2-м измерении как ваши фрагменты кода предлагают.
  • Ваши массивы ячеек A и B есть то же самое число элементов в 2-м измерение.

Следующая линия возвратит вектор колонки единиц и нулей, где тот указывает на матч элементов B с рядом в X:

sum(cellfun(@isequal,X,repmat(B,size(X,1),1)),2)==size(X,2)

Краткое объяснение:

  • repmat копирует B к размеру X.
  • cellfun сравнивает каждый элемент в этих двух матрицах.
  • сумма считает количество матчей последовательности в каждом ряду.
  • == проверяет, соответствуют ли все элементы в данном ряду.

Надежда это помогает

2
добавлено
это помогает много на самом деле! Спасибо!
добавлено автор Andy, источник

Не абсолютно уверенный, какие переменные вы имеете, но это может работать:

Превратите все в последовательность и затем используйте ismember, например:

['string' '_' 'string' '_' num2str(number)]

Удостоверьтесь, что сделали это на обоих исходных данных ismember.


В зависимости от размера ваших переменных может быть легче просто приложить все (или все, что уникально) к B, и затем бегите уникальный впоследствии.

1
добавлено
Обновленная почта включая второй метод, его работа зависит от ваших переменных, конечно.
добавлено автор Dennis Jaheruddin, источник
Проблема с выполнением этого состоит в том, что мне на самом деле нужно число с плавающей точкой, чтобы быть фактическим числом, и преобразования занимают много времени.
добавлено автор Andy, источник