【问题标题】:Where do I find the memory requirements of a MATLAB function?在哪里可以找到 MATLAB 函数的内存要求?
【发布时间】:2011-04-17 13:02:33
【问题描述】:

我有一个 3D 值数组(0 或 1),它非常大(大约 2300x2300x11)。我想使用例如interp3 将曲面拟合到这些值,但是当我尝试 MATLAB 时内存不足。因此,我决定将数组的大小减小到足以让 MATLAB 将其容纳在内存中。

现在,我做的缩减数组越小,我的结果就会越差(曲面拟合是对精度要求很高的测量过程的一部分),所以我想尽可能少地缩减数组。

有没有办法预先确定某个数组大小需要多少内存以及可用内存多少,然后使用这些信息来调整数组的大小,以避免出现内存不足的异常,但不是更多?

【问题讨论】:

    标签: matlab memory-management out-of-memory


    【解决方案1】:

    我不知道这个问题的答案,但我想知道你是否也可以拥有你的蛋糕并吃掉它。

    如果您的数据集太大,为什么不进行分段拟合?分块进行而不是省略数据点。

    或者更聪明地了解如何省略数据点。您希望它们位于高曲率区域 - 您的数据变化最快的区域。在远离行动的区域留下点,那里没有发生任何有趣的事情。您可能需要进行拟合,查看表面,添加和删除更多点,然后重试。

    这可能是一个反复的过程,但我敢打赌,只要有一点运气和努力,你就能很好地适应。

    【讨论】:

      【解决方案2】:

      您可以查看the maximum array sizes that are supported on different platforms。一般来说,如果您有一个PxQxR 大小的doubles 3D 数组,那么您的数组大小(以字节为单位)为P*Q*R*8。对于您的矩阵,大小约为 444 MB。您也可以尝试使用single(A) 将其缩减为singlesingle 每个元素使用 4 个字节,您可以将数组的大小减少 2 倍。

      我还没有真正深入了解interp3 的内部工作原理,但确切的内存要求将取决于您选择的插值选项。因此,您可以先尝试将其转换为single,看看它是否有效。如果没有,请尝试使用 80% (90%) 的行数和列数。这样你就有了原始数组的一大块,但内存需求只有原始数组的 64% (81%)。

      如果这没有帮助,你应该考虑 duffymo 的建议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        • 2018-12-26
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多