【发布时间】:2011-04-19 06:37:32
【问题描述】:
为了我的工作,我必须在 Matlab 中建立一个项目,这不是我选择的语言,我对效率有一些疑问。
我目前正在处理具有多个属性的点集合。与其将所有这些放在等长的单独数组中,我更愿意使用 Matlab 的用户定义类制作一个 Point 对象数组。例如:
% 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 的不同对象大小,例如,一个结构?
- 这对像 [points.x] 这样的操作有什么影响,我经常需要这样做?这是否被认为是一种有效的操作?
- 有没有更好的方法来初始化对象数组?上面的循环构造似乎非常低效。
- 我想应该可以在更有利地存储属性的同时模拟类似对象的行为,也许可以通过重载subsref。你会推荐吗?
或者更笼统地说:组织我的观点的最佳方式是什么?
期待您的建议!
【问题讨论】:
标签: matlab object performance