我需要处理大量(数千万)MATLAB结构;我需要十几个字段所以我认为记忆不会成为问题,直到我发现这个( explanation )
>> s=[];
>> s.first=1;
>> whos
Name Size Bytes Class Attributes
s 1x1 132 struct
>> s.second=2;
>> whos
Name Size Bytes Class Attributes
s 1x1 264 struct
>> s.third=3;
>> whos
Name Size Bytes Class Attributes
s 1x1 396 struct
这显然阻止我使用数千万个更大的结构。
求助于类解决了内存使用问题(每个结构数组的标记为56个字节),但在构造和破坏对象时速度过慢。
如何创建一个轻量级的结构(如C结构)并快速?
答案 0 :(得分:2)
将这些结构转换为数组,然后通过类提供访问器方法。
答案 1 :(得分:2)
(a)使用大数组(其中struct 1的'first'字段是'first'数组的元素1,对于struct 2,它在元素2中,等等),正如Pyrolistical所暗示的那样。
(b)考虑使用其他语言,如C ++(或Java),可以更好地控制内存使用。您可以通过mex函数访问C ++代码(有时可能会有点困难)。您可以直接从Matlab评估Java字节码。
答案 2 :(得分:2)
另一种选择:在隐藏的全局结构中保存数组的结构。创建一个挖掘此全局结构的类对象,以分割出仅适用于该实例的数据。
可以使用PERSISTENT关键字和/或使用private /目录更加干净地实现全局结构以进行信息隐藏。如果您使用的是2008a或更新版本,新的句柄对象系统应该有助于使实现更加清晰。
如果你真的有大而复杂的数据结构,我会认真考虑另一种语言,如C ++,Java或Python w / numpy。当我的任务很好地映射到它时,我喜欢Matlab。数据结构不是Matlab的优势之一,特别是在2008a之前。
答案 3 :(得分:0)
你对课程意味着什么?据我记得,类是matlab中用于类型的术语。我想你的意思是一个自定义的类。
一个解决方案(也建议用于matlab文档)是从结构数组切换到数组结构(在R,G,B的链接中查看)。