Будучи встроенной функцией1, textscan
вероятно, самый быстрый вариант:
result = textscan(A{1},'%f','Delimiter',';');
Вот небольшой тест, чтобы показать, что:
A = repmat('1; 23245675; -234567; 123456; 0',1,100000); % a long string
regexp_time = timeit(@ () regexp(A,';','split'))
strsplit_time = timeit(@ () strsplit(A,';'))
split_time = timeit(@ () split(A,';'))
textscan_time = timeit(@ () textscan(A,'%f','Delimiter',';'))
результат:
regexp_time =
0.33054
strsplit_time =
0.45939
split_time =
0.24722
textscan_time =
0.057712
textscan
является самым быстрым и ~4,3 раза быстрее, чем следующий метод (split
).
Это самый быстрый вариант, независимо от длины строки для разделения (обратите внимание на логарифмическую шкалу оси X):
1"Встроенная функция является частью исполняемого файла MATLAB. MATLAB не реализует эти функции на языке MATLAB. Хотя большинство встроенных функций имеют связанный с ними файл .m, этот файл только предоставляет документацию для функции». (из документации)
person
EBH
schedule
29.11.2018
A
это строка или массив ячеек? И если это массив ячеек, какие строки вы разделяете? Те, что в пределахA
, вообще не содержат;
. Кстати, если ваши данные структурированы, рассмотритеreadtable
илиdlmread
как более быстрые варианты для чтения в отформатированном виде. См. здесь. - person EBH   schedule 29.11.2018textscan
? это намного быстрее, чем все упомянутые вами варианты - person EBH   schedule 29.11.2018