2014-10-20 68 views
0

我在MATLAB中使用元素明智的乘法,因此我擁有的最大矩陣是120x50矩陣。在下面的代碼中,weight_N_120{i,1}{j,1}是一個單元格,其中i th單元格包含10000個其他單元格。在這10000個單元的每一箇中,我有一個由i尺寸爲120的矩陣。 ind_ExRet_N{i,1}{j,1}也是如此。MATLAB「內存不足」錯誤元素明智乘法

for i = 2:50 
     for j = 1:10000 
     weight_ExRet_NS{i,1}{j,1} = weight_N_120{i,1}{j,1}.*ind_ExRet_N{i,1}{j,1}; 
     end 
     i 
end 

當我運行它,我得到一個錯誤:

{Error using .* 
Out of memory. Type HELP MEMORY for your options. 

Error in PCA (line 26) 
    weight_ExRet_NS{i,1}{j,1} = weight_N_120{i,1}{j,1}.*ind_ExRet_N{i,1}{j,1}; 

Error in run (line 64) 
evalin('caller', [script ';']); 
} 

我意識到它會停止運行i = 30,所以這意味着沒有足夠的內存來執行元素方式乘法120 30 2矩陣。我該如何解決這個問題?

+0

問題可能是您生產的數據量。什麼是你的RAM內存?此外,如果你想浪費記憶,將矩陣存儲在單元陣列中是最好的選擇。由於您的單元格的所有元素都是雙重的,因此將它們存儲在單元格中是沒有意義的。嘗試一個結構。 – gire 2014-10-20 15:20:49

+0

是的,它可能發生,你只是產生大量的數據。而不是創建一個新的變量「weight_ExRet_NS」,替換「weight_N_120」。 – ASantosRibeiro 2014-10-20 15:23:06

+0

@gire我在40GB內存的網格上運行它。我是MATLAB新手,如何編輯它以創建一個結構而不是單元格?謝謝。 – TrueTears 2014-10-20 15:23:08

回答

1

我試圖估計weight_ExRet_NS(矩陣)的預期內存消耗。如果所有的矩陣是120x50(類型double),這是一個輕微低估(由於細胞):

120 * 50 * 50 * 10000 * 8 /一千○二十四分之一千○二十四= 22888

和答案在Mb。認爲你還有2個更多的單元陣列,它們的大小應該相似。我認爲你已經達到了極限。看它像一個桶,最終填滿了一個傾倒。你需要做的是想想如果你需要所有這些數據和精確度。如果情況仍然如此,您應該將其組裝起來並獨立處理。如果可以動態地刪除(或覆蓋)一些數據,那麼也應該這樣做。