как векторизовать эту функцию разделения строк в Matlab - PullRequest
1 голос
/ 13 марта 2011

Как я могу векторизовать эту функцию strsplit в Matlab, чтобы она работала быстрее? Спасибо

function parts = strsplit(splitstr, str)
  splitlen = length(splitstr);
  k = strfind(str, splitstr);
  parts = cell(length(k)+1, 1);
  s = 1;

  if isempty(k)
    parts{1} = str;
    return
  end

  for i=1:length(k)
    parts{i} = str(s : k(i)-1);
    s = k(i) + splitlen ;
  end

  parts{end} = str((k(end) + splitlen) : end); 

Ответы [ 2 ]

6 голосов
/ 13 марта 2011

Вы можете заменить свою функцию вызовом TEXTSCAN .

str = 'testxyztest2xyztest3';
splitStr = 'xyz';
out = textscan(str,'%s','delimiter',splitStr,'multipleDelimsAsOne',1)
out{1}
ans = 
    'test'
    'test2'
    'test3'
2 голосов
/ 13 марта 2011

Вы можете использовать regexp (обратите внимание также на пример при разбиении строки на этой странице):

out = regexp(str, regexptranslate('escape', splitStr), 'split');

Функция regexptranslate экранирует разделенную строку, так что она обрабатывается как литеральная строка, а не как регулярное выражение.

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