I want to initalize structures and it seems to be too slow. How do I do it with repmat, which is supposed to be a much faster solution in Matla
Here's the equivalent vectorized code of the first code snippet:
myloc.one = struct('id', zeros(30, 5), ...
'matrixBig', struct('matrixBig', repmat({zeros(6)}, 30, 1)), ...
'final', struct('final', repmat({zeros(30, 1)}, 5, 10)));
or alternatively:
myloc.one = struct('id', zeros(30, 5), ...
'matrixBig', repmat(struct('matrixBig', zeros(6)), 30, 1), ...
'final', repmat(struct('final', zeros(30, 1)), 5, 10));
Choose the one you like most.
As for the second (edited) part, it can be replaced with:
myObject = repmat({struct('s', zeros(6, 1), 'f', zeros(6, 1))}, 30, 10);
Note that there is no need to preallocate anything because there aren't any explicit loops here.
Well in this case the first question is why are you using a cell array of structs. One of the fundamentals of matlab is that everything can be vectorised. So instead set up a matrix of structs.
% Define the empty struct, struct itself is vectorised
myloc=struct('s',cell(10,30),'f',cell(10,30));
%Assign values
[myloc(:).s]=deal(0),[myloc(:).f]=deal(0);
A matrix of structures is a far more powerful datatype. For example if you want to extract a single row of the field in to a vector you can simply use the following syntax
sRow8=[myloc(8,:).s]