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.