Memory preallocation for array of objects with irregular array length property

Hi,
I have an array of objects from a class (let's say MyClass) and each object has as property an array of different length for each object. For example: MyClass_object(1).MyArray is 100x1 and MyClass_object(2).MyArray is 200x1.
Code for my class:
classdef MyClass < handle
properties
MyArray
end
methods
function obj = MyClass(array_length)
obj.MyArray = zeros(array_length,1);
end
end
end
Memory preallocation:
lengths = [100;200]
MyClass_object(1,:) = MyClass(lengths(1));
MyClass_object(2,:) = MyClass(lengths(2));
My question is: how is it possible to preallocate memory both for the objects and the arrays without coding one by one?
I tried this:
lengths = [100;200];
for i=1:length(lengths)
MyClass_object(i,:) = MyClass(lengths(i));
end
But then I get an warning: Variable appears to change in size in every loop iteration.
Note: vector "lengths" might have 50 or more values.
Thanks!

2 Comments

Please show a small example class and explain what problems you are having with setting properties of different objects to different sizes.
Hi James,
I have just edited it.
Stergios

Sign in to comment.

Answers (1)

Provided that MyClass_Object does not already exist:
lengths = [100;200];
NumL = length(lengths);
MyClass_Object(NumL, :) = MyClass(lengths(end));
for i=1:NumL-1
MyClass_object(i,:) = MyClass(lengths(i));
end

1 Comment

Hi Walter
Most probably you mean this:
MyClass_object(1:NumL, :) = MyClass(lengths(end));
instead of
MyClass_Object(NumL, :) = MyClass(lengths(end));
right?

Sign in to comment.

Categories

Products

Release

R2023a

Asked:

on 30 Aug 2023

Commented:

on 31 Aug 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!