2014-02-14 76 views
0

我有一个非常大的文件,大约10GB。我无法将它加载到内存中,所以我设法将它传送到.mat文件。但是当我尝试集群时,仍然出现'内存不足'问题。我认为最终的解决方案是将这些内存事物放到磁盘上。但是我需要从matlab中调用kmeans()方法。有没有办法将kmeans中的局部变量放到磁盘上,而不需要重写该方法?matlab内存最终解决方案

+0

如果您正在计算具有该大小的数据,则应该使用计算中心......如果您的文件很大但您的原始数据不是,那么您应该重新考虑您的格式。 – scenia

回答

0

当你加载你的数据时,它首先加载到你的计算机的RAM内存,所以我认为你的问题唯一的最终解决方案是有像16GB的RAM。

+0

我想要的是将大的本地变量放在磁盘上。我现在找不到如此大的RAM。 – Tengerye

0

您需要一个处理大型数据集的策略。可能性:

  1. 使用系统内存不足
  2. 减少数据集的精度。对于聚类小错误和缩放并不重要,如果可能,请将属性更改为缩放uint8或uint16。 (显然,删除所有不相关的数据)
  3. 使用更合适的算法。我不是这方面的专家,但CLARA和CLARANS是两种选择。这些算法不需要只有数据的一个子集,应该可以和matfile结合起来,只将相关的部分保存在内存中。
+0

但是,当我拥有10GB数据时,这些策略无能为力,对吧? – Tengerye

+0

对三种完全不同的策略的模糊回答,你期望的问题是什么?我不知道你的情况,我可能是错的。 – Daniel

0

如果数据不是高度非线性的,或许您可以尝试对数据进行降采样。如果你有兴趣,你可以阅读参考http://www.mathworks.com/help/signal/ref/downsample.html

例如,你可以把你的数据,scaleample = scale = 4,然后你将有2.5GB的数据。你可以走得更远,但会增加错误。处理完后,您可以使用不同的工艺对数据进行上采样(Matlab具有全部内置功能)。不幸的是,我不知道你的数据的类型,所以如果我的答案不符合你的问题,对不起。