MATLAB: функция «ismember» для символа nx1

#matlab #function #char #find

#matlab #функция #символ #Найти

Вопрос:

Добрый день.

Я пытаюсь найти пробелы в предложении, используя функцию «ismember» для символа nx1.

Здесь у меня есть рабочий пример для символа 1×1:

     %% Working example
    StringSearchedSpaces = ' ' ; %White spaces
    
    String1 = "Random info - at beginning-man. "  ...
            "Random info still continues. ";
    
    Char1 = convertStringsToChars(String1);
    
    String1Spaceidx = ismember(Char1, StringSearchedSpaces);
  

Обратите внимание, что это возвращает «0», если символ не является «пробелом», и «1», если это «пробел». Теперь я хотел бы применить ту же логику для символа nx1, см. Мою попытку:

 %% Not Working example
String2 = ["Random info in middle one, "  ...
        "Random info still continues. ",
        "Random info in middle two. "  ...
        "Random info still continues. "];

Char2 = convertStringsToChars(String2);

%PlanA
PlanAString1Spaceidx = ismember(Char2, StringSearchedSpaces);
%PlanB
for z=1:length(Char2)
PlanBString2Spaceidx(z,:) = ismember(Char2(z,:), StringSearchedSpaces);
end
  

Оба плана по какой-то причине не возвращают значения «0» и «1», которые указывают расположение «пробелов». Но возвращает только «0»?

Что я могу сделать, чтобы получить правильный ответ и в том же формате, что и «Рабочий пример» (с использованием символа 1×1), но теперь для символа nx1?

Заранее благодарю вас.

Комментарии:

1. гораздо лучше использовать strfind

Ответ №1:

В вашем случае convertStringsToChars будет возвращен cell массив. Вам ismember нужно будет применить функцию к каждой ячейке в массиве, например, с помощью cellfun :

 space_idx_char2 = cellfun(@(s) ismember(s, StringSearchedSpaces),Char2, 'UniformOutput', false)
  

В качестве альтернативы вы можете использовать цикл for, но вам придется немного изменить скобки:

 PlanBString2Spaceidx = cell(size(Char2)); % initialize empty cell array
for z=1:length(Char2)
    PlanBString2Spaceidx{z,:} = ismember(Char2{z,:}, StringSearchedSpaces);
end