當我嘗試創建一個非常大的矩陣如40000x40000時,我遇到了一個matlab問題。如何使用matlab創建一個非常大的矩陣
例如:
X =零(40000,40000);
的錯誤信息爲「超過由程序允許???最大可變大小」。
沒有任何解決方案。
另外我還有一個問題,我們可以有一個可變列大小的矩陣,如在Java中。
當我嘗試創建一個非常大的矩陣如40000x40000時,我遇到了一個matlab問題。如何使用matlab創建一個非常大的矩陣
例如:
X =零(40000,40000);
的錯誤信息爲「超過由程序允許???最大可變大小」。
沒有任何解決方案。
另外我還有一個問題,我們可以有一個可變列大小的矩陣,如在Java中。
40k * 40k => 1.6 * 10^9數字。我相信零將會返回花車。所以你需要大約1.6 * 10^9浮點* 4字節/浮點=> 6.4GB的RAM只爲這一個變量...
你確定你需要這麼大的數組嗎?
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
不,好吧是購買更多內存,如下所示。 稀疏只是刪除零個元素。
而在matlab中,您可以將新的列/行添加到矩陣中以製作更大的矩陣。
啊,但你的意思是,你可以有一個矩陣,其中一列是10行,另一個是20例如。不,你不能那樣做。沒想到你可以在Java tbh。
如果您真的需要一個大的矩陣,您可以使用Parallel Computing Toolbox(和MATLAB Distributed Computing Server)同時處理多臺機器的內存。這將允許你寫:
matlabpool open <a large number>
x = distributed.zeros(40000, 40000);
有很多事情可以做,因爲各種答案指出。正確的答案取決於你的實際問題。如果沒有64位版本的matlab和足夠的內存來存儲大型數組,或者以其他方式存儲數組,那麼這種大型數組的強力創建是不可能的。您可以離線存儲陣列,只在您使用時引入您需要的內容。例如,如果這些數字總是小整數,則使用uint8或int8或邏輯數組,即使是單個數組,所有這些都會減少內存需求,與雙數組相比。或者酌情使用稀疏存儲表單。很大程度上取決於你將如何處理陣列。
就一行中可變數量的元素而言,在這裏使用單元數組,而不是平坦的傳統數組。
我認爲使用硬盤上的文件來存儲數據是最好的選擇解決內存問題
一種方式是創建您的矩陣matfile。我理解它的方式是跳過內存並將其直接寫入硬盤。我已經嘗試過這樣的矩陣,對於我的懦弱計算機的內存來說太大了,而且速度很慢,但它確實有效。您可能需要一次構建它。