0

I am trying to pre-allocate a uniformly nested structure array.

I'm currently using for loops to allocate values to the array, but I understand that this is slow if the array has not been pre-allocated.

The structure I am trying to achieve is generated by the following code:

aLength = 10;
bLength = 20;

a = struct('b',{});
b = struct('c',{0},'d',{0});
for i = 1:aLength
    for j = 1:bLength
        a(i).b(j) = b;
    end
end

Where the zero values will be replaced later in a for loop.

HansHirse
  • 18,010
  • 10
  • 38
  • 67
Jason Tracey
  • 106
  • 8

1 Answers1

3

The following approach gives identical results to your loop:

aLength = 10;
bLength = 20;

b(1:bLength) = struct('c', {0}, 'd', {0});
a(1:aLength) = struct('b', b);

a
a(1)

Output:

a =
  1x10 struct array containing the fields:
    b

ans =
  scalar structure containing the fields:
    b =
      1x20 struct array containing the fields:
        c
        d

A small test increasing aLength and bLength shows a drastic speed-up from the loop version to the shown approach.

Hope that helps!

HansHirse
  • 18,010
  • 10
  • 38
  • 67