Поиск всех вхождений строки в массиве ячеек (сама часть структуры) - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть следующая структура

dataDens = 

     dens: [1x172 double]
    level: {1x172 cell}
     raga: {1x172 cell}

, из которой состоит dataDens.raga (для простоты уменьшаем количество столбцов ниже)

Columns 1 through 3
    'Multani'    'Tori'    'Tori' 

Я бы хотел найтииндексы, при которых появляется «Тори» (то есть [2 3] для примера выше).Однако все команды, которые я пробовал (ниже), либо дают ошибку, либо возвращают пустые результаты.Я думаю, что это просто вопрос добавления / удаления фигурных скобок или использования какого-либо преобразования;но я нахожусь в конце своего ума, и надеюсь, что кто-то может помочь прояснить

indices = find(strcmp([dataDens.raga{:}], {'Tori'}))
indices = ismember('Tori', dataDens.raga)
[if,where] = ismember('Tori', dataDens.raga)

1 Ответ

1 голос
/ 26 апреля 2019

Проблема действительно была в скобках.[dataDens.raga{:}] приведет к конкатенации символьных массивов, например:

>> [dataDens.raga{:}]
ans =
    'MultaniToriTori'

Использование strcmp для сравнения с 'Tori' приведет к ложному результату, поскольку нет точного соответствия.Однако вы можете сравнить всю ячейку, используя strcmp, который затем возвратит логический массив, в котором find может использоваться для получения индексов true записей:

indices = find(strcmp(data, {'Tori'}))

В качестве альтернативы, ismember также будет работать, но, используя ismember('Tori', dataDens.raga), вы проверяете, находится ли 'Tori' в dataDens.raga, а не наоборот.Изменение этого значения на

ismember(dataDens.raga, 'Tori')

снова даст вам логический массив, а find получит искомые индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...