2016-02-14 61 views
1
R = randn(960,d); creates a matrix of random numbers. 

我有尺寸1000000 by 960的另一個矩陣X期間內存不足錯誤。當我做了手術Matlab的:乘法運算

B = (X*R >=0) ; 

我得到的錯誤

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

d = 4096。但是,d < 4096尤其沒有錯誤。 d = [32 64 128 256 512 1024 2048 ]沒有問題,除了d>4096的情況。 X具有單精度格式的數據元素。

打字memory

Maximum possible array:    15663 MB (1.642e+010 bytes) * 
Memory available for all arrays:  15663 MB (1.642e+010 bytes) * 
Memory used by MATLAB:    4706 MB (4.935e+009 bytes) 
Physical Memory (RAM):    8151 MB (8.547e+009 bytes) 

* Limited by System Memory (physical + swap file) available. 

我不知道我怎麼能解決這個問題。我在運行8位內存和i7處理器的Windows 64位操作系統上運行Matlab 64位2011b版本。請幫忙!

+2

通過在命令窗口中輸入「全部清除」來清除工作空間,然後重新輸入「內存」。輸出是什麼? – Alessiox

+2

只要做數學!如果大小爲1000000 * 4096,則需要31250 MB來存儲乘法結果。 – Daniel

回答

1

這裏有一點小數學方便。
在Matlab中,單精度單元佔用4字節內存,而雙精度單元佔用8字節。
X(單精度)的大小是1000000 * 960個元素,每個4個字節,總共3.84GB。
R(雙精度)的大小是960 * 4096個元素,每個8個字節,總共爲0.0315 GB。

現在問題是產品X*R,必須預先分配,然後進行評估,以提供B上的邏輯索引。矩陣X*R的大小爲1000000 * 4096,假設這種矩陣是單精度的(據我所知,雙精度和單精度之間的乘積也是單精度),它將佔用16GB的大小。這肯定會阻塞物理內存和虛擬內存(並且16GB大於內存命令中的Maximum possible array大小)。

+0

我明白了,謝謝你的回覆。你能否建議類似的問題的解決方案?對於960或更高階的方陣,我的尺寸爲960的另一個矩陣的結果轉置運算出現內存錯誤。物理內存限制是否也會導致轉置和乘法錯誤? – Sm1

+0

我已將虛擬內存大小增加到16GB(在完成Mathworks的建議之後),但問題仍然存在。 – Sm1

+1

一個960 * 960矩陣佔用7MB的東西(如果是雙精度的),所以對於像你這樣的PC來說,它不應該是一個大問題。嘗試從工作區中清除不使用的變量,特別是現在您正在處理大矩陣。一次運行1個任務,假設執行轉置,從工作空間清除不必要的變量,然後繼續執行以下任務。在更改虛擬內存大小後,您是否也重新啓動了您的PC?我認爲,如果重新啓動,Windows會更快樂。 – Alessiox