Faster way to concatenate arrays with unknown size ?

12 visualizaciones (últimos 30 días)
RuiQi
RuiQi el 7 de Jul. de 2016
Editada: per isakson el 7 de Jul. de 2016
In my application, I have a huge for loop and at each iteration, I concatenate the 'result' array with the matrix obtained at the current loop. The function returns this 'result' array at the end of the for loop. Is there a way I can speed things up because concatenating seems very slow when the result array gets large enough. I won't know the final size of the array but I will know the size of the matrix at the current loop if that helps..

Respuesta aceptada

Walter Roberson
Walter Roberson el 7 de Jul. de 2016
If you know the final data size then pre-allocate the output and store into the array as you go.
If you do not know the final data size then store the pieces in a cell array until the end (better yet if you can at least pre-allocate the cell array itself.) You can then cell2mat()
  3 comentarios
per isakson
per isakson el 7 de Jul. de 2016
Editada: per isakson el 7 de Jul. de 2016
"know the maximum size it can take" &nbsp
One approach: Assume the result_array is &nbsp<kxm double>. Preallocate total_result as &nbsp<kxmxn double> where n is maximum number of loops that can occur.
total_result = zeros(k,m,n)
loop over huge number
total_result(:,:,jj) = result_array;
end
delete unused space of total_result
Walter Roberson
Walter Roberson el 7 de Jul. de 2016
Yes, removing extra rows afterwards is efficient.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by