Я пишу сценарий Matlab, который начинается с чтения файла .log с разделителями-пробелами в массив ячеек. Все заголовки столбцов в файле представляют собой строки, но типы данных в файле смешанные, поэтому для простоты я пока рассматриваю каждое значение как строку.
Это то, что у меня есть до сих пор, и оно отлично работает с небольшими файлами.
fileID = fopen('file');
ImportData = char.empty; % create empty array to add on to
while ~feof(fileID)
tLines = fgetl(fileID); % reads line into string
raw = strsplit(tLines, ' '); %splits line into array for that line
ImportData = cat(1, ImportData, raw); %adds line to rest of array
end
fclose(fileID);
Однако фактические файлы, которые этот скрипт должен будет прочитать, очень громоздки (30 000+ строк, 200+ столбцов), и я считаю, что эта процедура очень медленная для этого. Я провел некоторое исследование и уверен, что векторизация — это ответ, но я очень не знаком с этой областью.
Каким образом я могу изменить эту процедуру, чтобы резко увеличить скорость?
РЕДАКТИРОВАТЬ: типы столбцов несовместимы, поэтому функция importdata
не работает. Файл имеет расширение .log, поэтому функция readtable
не работает. В идеале более быстрый метод использования textscan был бы идеальным.
fscanf
. Далее можно использовать метод textscan, где вы указываете разделитель. Трудно давать советы, не зная формата данных - person patrik   schedule 29.06.2015ImportData
- это переменная. Предоставленный код похож на c-код. Предложение состоит в том, чтобы использовать обширные библиотеки Matlab. - person patrik   schedule 30.06.2015