Przydział pamięci MatLab, gdy maksymalny rozmiar jest nieznany

Próbuję przyśpieszyć skrypt, który napisałem w Matlab, który dynamicznie przydziela pamięć macierzy (zasadniczo czyta linię danych z pliku i zapisuje ją w macierzy, a następnie odczytuje inną linię i przydziela więcej pamięci na większą macierz aby zapisać następną linię). Powodem, dla którego to zrobiłem zamiast prealokacji pamięci za pomocą zer () lub czegoś, co nie zna dokładnego rozmiaru macierzy, musi być przechowywanie wszystkich danych. Nie znam również maksymalnego rozmiaru macierzy, więc nie mogę po prostu wstępnie przydzielić maksymalnego rozmiaru, a następnie pozbyć się pamięci, której nie używałem. Było to dobre dla małych ilości danych, ale teraz muszę skalować mój skrypt, aby odczytać wiele milionów punktów danych, a ta implementacja alokacji dynamicznej jest zbyt wolna.

Oto moja próba przyspieszenia skryptu: Próbowałem przydzielić pamięć w dużych blokach za pomocą funkcji zer, a po wypełnieniu bloku przydzielam inny duży blok. Oto przykładowy kod:

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

Niestety to nie działa, gdy go uruchomię, pojawia się komunikat o błędzie „Błąd przy użyciu vertcat Wymiary połączonych macierzy nie są spójne”.

Oto moje pytanie: Czy ta metoda przydzielania pamięci w dużych blokach jest faktycznie szybsza niż przyrostowa alokacja dynamiczna, a także dlaczego powyższy kod nie działa? Dzięki za pomoc.

questionAnswers(3)

yourAnswerToTheQuestion