Для моей работы я должен создать проект в Matlab, который не является моим языком выбора, и у меня есть несколько вопросов относительно эффективности.
В настоящее время я имею дело с набором точек с несколькими свойствами. Вместо того, чтобы помещать все это в отдельные массивы равной длины, я бы предпочел создать один массив объектов Point, используя пользовательские классы Matlab. Например:
% 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
Причина, по которой я предпочитаю вышеизложенное, является эстетической (объекты должны быть объектами) и практической, поскольку она позволяет мне легко создавать подмножества точек без необходимости индексировать несколько различных массивов.
Однако мне интересно, является ли это наиболее эффективным способом ведения дел, учитывая, что набор точек может вырасти довольно большим, порядка тысяч или десятков тысяч точек. Мои основные вопросы:
- Для моего понимания: как Matlab хранит объектные массивы в памяти? Как он обрабатывает объекты различного размера, зависящие от prop1, например, struct?
- Как это влияет на такие операции, как [points.x], что мне нужно было бы делать довольно часто? Считается ли это эффективной операцией?
- Есть ли лучший способ инициализировать массив объектов? Вышеприведенная конструкция цикла кажется крайне неэффективной.
- Я полагаю, что должна быть возможность имитировать объектоподобное поведение при более выгодном сохранении свойств, возможно, путем перегрузки subsref . Вы бы порекомендовали это?
Или, говоря более обобщенно: каков был бы оптимальный способ организации моих очков?
Ждем ваших советов!