在MATLAB中处理大量结构

时间:2008-11-13 16:11:37

标签: memory matlab struct

我需要处理大量(数千万)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结构)并快速?

4 个答案:

答案 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的链接中查看)。