【问题标题】:Handling large amount of structures in MATLAB在 MATLAB 中处理大量结构
【发布时间】:2008-11-13 16:11:37
【问题描述】:

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

【问题讨论】:

  • 为什么这会“明显阻止”你?您需要 10^6 * 12 * 132 字节,这可能可行也可能不可行,具体取决于您可用的硬件。

标签: memory matlab struct


【解决方案1】:

将这些结构体转换成数组,然后通过类提供访问器方法。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 我所说的类使用的意思是用具有相同属性的类替换我的结构。数组结构确实会更轻,但不会给我引用结构数组的第 i 个元素的功能,我经常使用它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多