10 Apr 2018
Appending to Matlab Arrays
The variable $var appears to change size on every loop iteration. Consider preallocating for speed.
So sayeth Matlab.
Let's try it:
x_prealloc = cell(10000, 1); x_end = {}; x_append = {}; for n=1:10000 % variant 1: preallocate x_prealloc(n) = {42}; % variant 2: end+1 x_end(end+1) = {42}; % variant 3: append x_append = [x_append {42}]; end
Which variant do you think is fastest?
Unsurprisingly, preallocation is indeed faster than growing an array. What is surprising is that it is faster by a constant factor of about 2 instead of scaling with the array length. Only appending by x = [x {42}]
actually becomes slower for larger arrays. (The same thing happens for numerical arrays, struct arrays, and object arrays.)
TL;DR: Do not use x = [x $something]
, ever. Instead, use x(end+1) = $something
. Preallocation is generally overrated.