![]() |
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.