¿Cómo puedo preasignar un vector no numérico en MATLAB?

A menudo me encuentro haciendo algo como esto:

unprocessedData = fetchData();  % returns a vector of structs or objects
processedData = [];             % will be full of structs or objects

for dataIdx = 1 : length(unprocessedData) 
    processedDatum = process(unprocessedData(dataIdx));
    processedData = [processedData; processedDatum];
end

Lo que, si bien es funcional, no es óptimo: laprocessedData vector está creciendo dentro del bucle. Inclusomlint me advierte que debería considerar la preasignación de velocidad.

Fueron datos un vector deint8, Yo podría hacer esto

% preallocate processed data array to prevent growth in loop
processedData = zeros(length(unprocessedData), 1, 'int8');

y modifique el bucle para llenar espacios de vectores en lugar de concatenar.

Existe alguna forma de preasignar un vector para que luego pueda contener estructuras u objetos?

Actualizar inspirado por Respuesta de Azim, Simplemente he invertido el orden del bucle. Procesar el último elemento primero fuerza la preasignación de todo el vector en el primer golpe, ya que el depurador confirma:

unprocessedData = fetchData();

% note that processedData isn't declared outside the loop - this breaks 
% it if it'll later hold non-numeric data. Instead we exploit matlab's 
% odd scope rules which mean that processedData will outlive the loop
% inside which it is first referenced: 

for dataIdx = length(unprocessedData) : -1 : 1 
    processedData(dataIdx) = process(unprocessedData(dataIdx));
end

Esto requiere que cualquier objeto devuelto porprocess() tiene un constructor de cero argumentos válido desde que MATLAB inicializaprocessedData en la primera escritura con objetos reales.

mlint todavía se queja del posible crecimiento de la matriz, pero creo que es porque no puede reconocer la iteración de bucle invertido ...

Respuestas a la pregunta(3)

Su respuesta a la pregunta