2010-02-02 2196 views
8

當我嘗試創建一個非常大的矩陣如40000x40000時,我遇到了一個matlab問題。如何使用matlab創建一個非常大的矩陣

例如:

X =零(40000,40000);

的錯誤信息爲「超過由程序允許???最大可變大小」。

沒有任何解決方案。

另外我還有一個問題,我們可以有一個可變列大小的矩陣,如在Java中。

回答

1

40k * 40k => 1.6 * 10^9數字。我相信零將會返回花車。所以你需要大約1.6 * 10^9浮點* 4字節/浮點=> 6.4GB的RAM只爲這一個變量...

你確定你需要這麼大的數組嗎?

16

40000 * 40000 *每個數字8個字節= 12 GB,當然你沒有足夠的內存。

要創建具有零分的一個巨大的矩陣,你需要一個稀疏矩陣

m = sparse(40000, 40000) 

要創建變量數組,你可以使用一個單元陣列

m = cell(3, 1) 
m(1) = [1,2,3] 
m(2) = [2,4,6,8,10] 
m(3) = 6+6i 
0

不,好吧是購買更多內存,如下所示。 稀疏只是刪除零個元素。

而在matlab中,您可以將新的列/行添加到矩陣中以製作更大的矩陣。

啊,但你的意思是,你可以有一個矩陣,其中一列是10行,另一個是20例如。不,你不能那樣做。沒想到你可以在Java tbh。

4

有很多事情可以做,因爲各種答案指出。正確的答案取決於你的實際問題。如果沒有64位版本的matlab和足夠的內存來存儲大型數組,或者以其他方式存儲數組,那麼這種大型數組的強力創建是不可能的。您可以離線存儲陣列,只在您使用時引入您需要的內容。例如,如果這些數字總是小整數,則使用uint8或int8或邏輯數組,即使是單個數組,所有這些都會減少內存需求,與雙數組相比。或者酌情使用稀疏存儲表單。很大程度上取決於你將如何處理陣列。

就一行中可變數量的元素而言,在這裏使用單元數組,而不是平坦的傳統數組。

0

我認爲使用硬盤上的文件來存儲數據是最好的選擇解決內存問題

1

一種方式是創建您的矩陣matfile。我理解它的方式是跳過內存並將其直接寫入硬盤。我已經嘗試過這樣的矩陣,對於我的懦弱計算機的內存來說太大了,而且速度很慢,但它確實有效。您可能需要一次構建它。