MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   Matlab中对象数组的效率 (https://www.labfans.com/bbs/showthread.php?t=23955)

poster 2019-12-10 20:48

Matlab中对象数组的效率
 
对于我的工作,我必须在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 我之所以喜欢上面的原因,既是美观(对象应该是对象)又是实用的,因为它使我可以轻松创建点的子集,而不必索引多个不同的数组。

但是,考虑到该点集可能会增长成千上万个点,因此我想知道这是否是最有效的处理方式。我的主要问题是:
[LIST=1][*]据我了解:Matlab如何在内存中存储对象数组?它如何处理依赖于prop1(例如,结构)的变化的对象大小?[*]这将如何影响像[points.x]这样的操作,这是我经常需要做的事情?这被认为是有效的操作吗?[*]有没有更好的方法来初始化对象数组?上面的循环构造似乎效率很低。[*]我想应该有可能模拟类对象的行为,同时更有利地存储属性,也许是通过重载[URL="http://www.mathworks.es/help/techdoc/ref/subsref.html"]subsref[/URL] 。你会推荐吗?[/LIST]或更笼统地说:组织我的观点的最佳方法是什么?

期待您的指教!



[B]回答:[/B]

并不是真正按顺序回答您的问题,但是这里有一些希望有用的信息:
[LIST=1][*]对象以与结构相同的方式存储在内存中-每个字段都是其自己完整的MATLAB数组(C-Mex程序员使用mxArray),因此每个字段的大小可以独立。[*]我可能会做出类似带有字段x,y,prop1,prop2的单个PointList对象的操作。这些字段将是适当长度的向量。几乎可以肯定,这将比Point对象列表更有效。当然,它将占用更少的内存。[*]您应该在PointList上定义访问器方法,以确保向量的长度始终相同,以此类推。[*]如果确实需要,可以让PointList的“容量”大于当前存储在其中的元素的数量-这样一来,就可以避免一直调整x,y,...的大小。[*]通常,重载subsref不适合胆小者。请记住,您还需要正确地至少重载numel,ndims,长度,末端和大小。[/LIST]
[url=https://stackoverflow.com/questions/3829538]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:24

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.