Programming and Data Types

Preallocating Arrays

You can often improve code execution time by preallocating the arrays that store output results. Preallocation makes it unnecessary for MATLAB to resize an array each time you enlarge it. Use the appropriate preallocation function for the kind of array you are working with.

 Array Type Function Examples Numeric array `zeros` `y = zeros(1,100);` Cell array `cell` `B = cell(2,3);``B{1,3} = 1:3;``B{2,2} = 'string';` Structure array `struct,repmat` `data = repmat(struct('x',[1 3],...`` 'y',[5 6]), 1, 3);`

Preallocation also helps reduce memory fragmentation if you work with large matrices. In the course of a MATLAB session, memory can become fragmented due to dynamic memory allocation and deallocation. This can result in plenty of free memory, but not enough contiguous space to hold a large variable. Preallocation helps prevent this by allowing MATLAB to "grab" sufficient space for large data constructs at the beginning of a computation.

Preallocating a Nondouble Matrix

When you preallocate a block of memory to hold a matrix of some type other than `double`, it is more memory efficient and sometimes faster to use the `repmat` function for this.

The statement below uses `zeros` to preallocate a 100-by-100 matrix of `uint8`. It does this by first creating a full matrix of `double`s, and then converting the matrix to `uint8`. This costs time and uses memory unnecessarily.

• ```A = int8(zeros(100));
```

Using `repmat`, you create only one `double`, thus reducing your memory needs.

• ```A = repmat(int8(0), 100, 100);
```

Use repmat When You Need to Enlarge Arrays

In cases where you cannot preallocate, see if you can increase the size of your array using the `repmat` function. `repmat` tries to get you a contiguous block of memory for your expanding array.

 Vectorizing Loops Other Ways to Speed Up Performance