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:
Or to put things more general: what would be the optimal way of organizing my points?
Looking forward to your advice!
I've found that the performance of cell Arrays, multi-dimensional arrays, and structure arrays are all far slower than the use of multiple independent variables. Thus, my optimized codes have been using super long if-statements and functions which completely write out which variables are needed or not.
sz = size( A ) returns a row vector whose elements are the lengths of the corresponding dimensions of A . For example, if A is a 3-by-4 matrix, then size(A) returns the vector [3 4] .
A cell array is a data type with indexed data containers called cells, where each cell can contain any type of data. Cell arrays commonly contain either lists of text, combinations of text and numbers, or numeric arrays of different sizes.
A class constructor can create an array by building the array and returning it as the output argument. For example, the ObjectArray class creates an object array that is the same size as the input array. Then it initializes the Value property of each object to the corresponding input array value.
Not really answering your questions in order, but here's some hopefully useful information:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With