Я пытаюсь ускорить скрипт, который я написал в Matlab, который динамически выделяет память матрице (в основном читает строку данных из файла и записывает ее в матрицу, затем читает другую строку и выделяет больше памяти для большей матрицы для сохранения следующей строки). Причина, по которой я сделал это вместо предварительного выделения памяти с использованием нулей () или чего-то еще, заключалась в том, что я не знаю точного размера матрицы, которая должна быть для хранения всех данных. Я также не знаю максимальный размер матрицы, поэтому я не могу просто предварительно выделить максимальный размер, а затем избавиться от памяти, которую я не использовал. Это было нормально для небольших объемов данных, но теперь мне нужно масштабировать мой скрипт, чтобы считывать многие миллионы точек данных, а эта реализация динамического распределения слишком медленная.
Итак, вот моя попытка ускорить скрипт: я попытался выделить память большими блоками, используя функцию нулей, затем, когда блок заполнен, я выделяю другой большой блок. Вот пример кода:
data = [];
count = 0;
for ii = 1:num_filelines
if mod(count, 1000) == 0
data = [data; zeroes(1000)]; %after 1000 lines are read, allocate another 1000 line
end
data(ii, :) = line_read(file); %line_read reads a line of data from 'file'
end
К сожалению, это не работает, когда я запускаю его, я получаю сообщение об ошибке: «Ошибка при использовании vertcat. Размеры объединяемых матриц не согласованы».
Итак, вот мой вопрос: действительно ли этот метод выделения памяти в больших блоках быстрее, чем инкрементное динамическое выделение, а также почему приведенный выше код не работает? Спасибо за помощь.