Hi. For my work I have to set up a project in Matlab, which is not my language of choice and I have some questions regarding efficiency.
I am currently dealing with a collection of points with several properties. Rather than putting all of these in separate arrays of equal length I would much prefer to make a single array of Point objects, using Matlab's user defined classes. For example:
% Point.m
classmethod Point < handle
properties
x, y, prop1, prop2
end
end
% script.m
... % define x(100), y(100), prop1(100), prop2(100)
points(100) = Point; % this seems to be the way to allocate an object vector
for i = 1:100
points(i).x = x(i); % copy values into object
points(i).y = y(i);
points(i).prop1 = prop1(i);
points(i).prop2 = prop2(i);
end
The reason that I prefer the above is both aesthetic (objects should be objects) and practical, as it allows me to easily create subsets of points without having to index several different arrays.
However I wonder if it is the most efficient way of doing things, considering that the set of points might grow quite large in the order of thousands or tens of thousands of points. My main questions are:
- For my understanding: how does Matlab store object arrays in memory? How does it handle varying object size dependent of prop1 being, for instance, a struct?
- How does this affect operations like [points.x], something that I would need to do quite often? Is this considered an efficient operation?
- Is there a better way to initialize the object array? The above loop construction seems highly inefficient.
- I suppose it should be possible to simulate object-like behaviour while storing properties more favourably, perhaps by overloading subsref. Would you recommend that?
Or to put things more general: what would be the optimal way of organizing my points?
Looking forward to your advice!