4

我需要处理大量(数千万)的 MATLAB 结构;我需要十几个字段,所以我认为在我发现这一点之前记忆不会成为问题(解释

>> 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

4 回答 4

2

Convert these structs into arrays, and then provide accessor methods via a class.

于 2008-11-13T17:55:33.727 回答
2

(a) 正如 Pyrolistical 所建议的那样,使用大数组(其中结构 1 的“第一个”字段是“第一个”数组的元素 1,对于结构 2,它在元素 2 中,等等)。

(b) 考虑使用另一种语言,如 C++(或者可能是 Java),它可以更好地控制内存使用。您可以通过 mex 函数访问 C++ 代码(有时会有点困难)。您可以直接从 Matlab 评估 Java 字节码。

于 2008-11-17T14:26:35.750 回答
2

另一种选择:将数组结构保存在隐藏的全局结构中。创建一个深入研究这个全局结构的类对象,以切出仅适用于该实例的数据。

使用 PERSISTENT 关键字和/或使用 private/ 目录来隐藏信息可以更干净地实现全局结构。如果您使用的是 2008a 或更新版本,新的句柄对象系统应该有助于使实现更加简洁。

如果你真的有大而复杂的数据结构,我会认真考虑另一种语言,如 C++、Java 或带有 numpy 的 Python。当我的任务很好地映射到它时,我喜欢 Matlab。数据结构不是 Matlab 的强项之一,尤其是 2008a 之前的版本。

于 2008-11-27T05:55:14.860 回答
0

你说的类是什么意思?据我所知,类是matlab中类型的术语。我猜你的意思是一个自定义类。

一个解决方案(在 matlab 文档中也被推荐)是从结构数组切换到数组结构(在 R、G、B 的链接中查看)示例。

于 2008-11-13T16:23:35.750 回答