Asignación de memoria de MatLab cuando se desconoce el tamaño máximo

Estoy tratando de acelerar un script que he escrito en Matlab que asigna dinámicamente la memoria a una matriz (básicamente lee una línea de datos de un archivo y la escribe en una matriz, luego lee otra línea y asigna más memoria para una matriz más grande para almacenar la siguiente línea). La razón por la que hice esto en lugar de preasignar la memoria utilizando ceros () o algo así es que no sé el tamaño exacto que debe tener la matriz para contener todos los datos. Tampoco sé el tamaño máximo de la matriz, por lo que no puedo preasignar un tamaño máximo y luego deshacerme de la memoria que no usé. Esto estaba bien para pequeñas cantidades de datos, pero ahora necesito escalar mi script para leer muchos millones de puntos de datos y esta implementación de asignación dinámica es demasiado lenta.

Así que aquí está mi intento de acelerar la secuencia de comandos: intenté asignar memoria en bloques grandes utilizando la función de ceros, luego, una vez que se llena el bloque, asigno otro bloque grande. Aquí hay un código de ejemplo:

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

Desafortunadamente, esto no funciona, cuando lo ejecuto, aparece un error que dice "Error al utilizar vertcat Las dimensiones de las matrices que se concatenan no son consistentes".

Entonces, aquí está mi pregunta: ¿es este método de asignar memoria en bloques grandes realmente más rápido que la asignación dinámica incremental, y también por qué no se ejecuta el código anterior? Gracias por la ayuda.

Respuestas a la pregunta(3)

Su respuesta a la pregunta