2014-02-14 73 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具有全部內置功能)。不幸的是,我不知道你的數據的類型,所以如果我的答案不符合你的問題,對不起。