Я использую MATLAB для чтения пустых выходных файлов и заметил, что он читал файлы довольно медленно по сравнению с читателем, который я написал в Python для тех же файлов (на порядка 120s для MATLAB, 4s для Python в том же наборе). Файлы имеют комбинацию букв и цифр, где числа, которые я действительно хочу, имеют уникальную строку в одной строке, но в остальной части файла нет реального шаблона. Есть ли более быстрый способ читать в неравномерно форматированных текстовых файлах в MATLAB?Быстрое разделение строк в MATLAB
Я попытался использовать профилировщик кода в MATLAB, чтобы увидеть, что занимает больше всего времени, и это казалось strfind
и strsplit
функциями. Глубоко вниз, strfun\private\strescape
кажется виновником, который занимает около 50% времени, который вызывается функцией strsplit
.
В настоящее время я использую комбинацию strfind и strsplit для поиска по файлу для 5 конкретных строк, а затем конвертировать строку после нее в двойную.
lots of text before this
#### unique identifying text here
lots of text before this
sometext X = #####
Y = #####
Z = #####
more text = ######
Я повторяю файл с примерно следующим кодом, повторяющимся для каждого найденного числа.
fid=fopen(filename)
tline=fgets(fid)
while ischar(tline)
if ~isempty(strfind(tline('X =')))
tempstring=strsplit(tline(13:length(tline)),' ');
result=str2double(char(tempstring(2)));
end
tline=fgets(fid);
end
'strsplit' возвращает массив ячеек, которые также, как известно, медленны. И я считаю, что некоторые функции манипуляции строкой имеют кучу накладных расходов. Вы пытались использовать 'textscan'? Или еще лучше: ваш скрипт python? :) –
Ваш способ кажется неэффективным вообще, но я не могу сделать, чтобы «сравнить» производительность без фактического файла. У вас есть копия, на которую вы можете ссылаться? –
также, правильно ли я думаю, что вы в основном хотите значения X Y и Z? –