Эффективность объектных массивов в Matlab

Для моей работы мне нужно создать проект в 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

Причина, по которой я предпочитаю вышесказанное, является одновременно эстетической (объекты должны быть объектами) и практической, поскольку он позволяет мне легко создавать подмножества точек без необходимости индексировать несколько различных массивов.

Однако мне интересно, является ли это наиболее эффективным способом решения задач, учитывая, что набор точек может вырасти довольно большим, порядка тысяч или десятки тысяч баллов. Мои основные вопросы:

  1. Насколько я понимаю: как Matlab хранит массивы объектов в памяти? Как он справляется с изменением размера объекта в зависимости от того, является ли prop1, например, структурой?
  2. Как это влияет на такие операции, как [points.x], которые мне приходилось бы делать довольно часто? Считается ли это эффективной операцией?
  3. Есть ли лучший способ инициализировать массив объектов? Вышеупомянутая конструкция цикла кажется очень неэффективной.
  4. Я полагаю, что должна быть возможность имитировать поведение, подобное объекту, при более благоприятном сохранении свойств, возможно, перегрузив подссылку . Вы бы порекомендовали это?

Или, говоря более широко: каков был бы оптимальный способ организации моих баллов?

Жду вашего совета!

6
задан gertjan 30 September 2010 в 09:59
поделиться