如何在Matlab 2009b中增加数组块并解决内存不足错误?

我正在使用Matlab 2009b并出现内存不足错误。 我读了其他张贴的溶胶,但他们对我没有用。 我相信我正在做的事情,但我必须使用非常大量的数组大小。 我认为这个问题超出了这个事实,即Matlab不能使一个数组在一个以上的OS块中。 我正在使用Windows 7 。 有没有办法摆脱这个问题? 例如,我可以增加Matlab在Windows 7中使用的数组块吗?

系统:Windows 7
Matlab:2009b

如果你认为你的数组大小不足以保证这样的错误,也许你以前的操作碎片可用的内存。 MATLAB需要连续的块,所以碎片会导致这样的错误。

因此,在代码中出现内存不足错误的位置之前,请尝试运行pack命令。 除了通常的修复之外,我能想到的就是这些。

如果最大的可用块(如memory所示)远小于Matlab可用的最大内存量,则Matlab(或系统)的重新启动可能会有所帮助。

否则,您需要重写代码或购买更多的RAM(和/或使用64位版本的Win7)。

我建议你尝试重写你的代码。 解决内存问题通常是可能的。

编辑

从你在@Richie Cotton的帖子上的评论中,我发现你想对分类进行大量的数据分析。 如果只有少数几类,其中没有一个是非常稀疏的,那么可以通过对每个数据的30%进行kmeans(例如10个随机选择的子集)来解决问题。 这应该找到你的集群的中心很好。 要将数据与内核相关联,您只需要为每个数据点计算到集群中心的距离,并将它们与最近的中心关联起来。

编辑:MathWorks 提供关于这个问题的建议 。


您可以使用命令system_dependent memstatssystem_dependent dumpmem (以及Jonas指出的简单memory )查看内存使用情况。

命令pack (实际上是对工作区进行碎片整理)也可能有用。

如果你正在处理含有超过1000万个值的对象,那么内存很容易成为问题。 抛出硬件的问题(即购买更多的RAM)可能是一个选择,但是你可以实现什么是有限的。

我建议你采用重新编码的方式来提高记忆效率的方式是:

看看是否有任何变量你不需要分配。 这是一个典型的例子,当一个函数返回一个与输入相同大小的值时。

 function x = XPlus1(x) x = x + 1; end 

比内存效率更高

 function y = XPlus1(x) y = x + 1; end 

接下来,尝试将问题分解成小块。 在最简单的层面上,这可能涉及对行进行操作而不是整个矩阵,或者对单个元素而不是矢量执行操作。 (由于内存限制,循环的成本比它根本不运行的成本要小)。然后,你必须重新构建你的答案。

这一步基本上是behing map-reduce的哲学,所以作为奖励,你的代码将更容易并行化。