簡體   English   中英

如何使用matlab創建一個非常大的矩陣

[英]how to create a very large matrix using matlab

當我試圖創建一個非常大的矩陣,如40000x40000時,我有matlab的問題。

例如:

X =零(40000,40000);

錯誤消息是“???超出程序允許的最大變量大小。”

有什么辦法嗎?

另外我還有另外一個問題,我們是否可以使用可變列大小的矩陣,例如在java中。

每個數字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

各種答案都指出,你可以做很多事情。 正確答案取決於您的實際問題。 如果沒有64位版本的matlab加上足夠的內存來存儲那么大的數組,或者以其他方式存儲數組,那么就不可能創建如此龐大的數組。 您可以離線存儲陣列,只在您使用時引入所需內容。

例如,如果這些數字總是小整數,那么使用uint8或int8,或邏輯數組,甚至是單個數組,與雙數組相比,所有這些都將減少內存需求。 或者根據需要使用稀疏存儲表單。 很大程度上取決於你將如何處理陣列。

對於一行中可變數量的元素,請在此處使用單元格數組,而不是平面傳統數組。

如果您確實需要一個大的矩陣,您可以使用並行計算工具箱 (和MATLAB分布式計算服務器 )同時利用多台機器的內存。 這將允許你寫:

matlabpool open <a large number>
x = distributed.zeros( 40000, 40000 );

另請參見: 用於共分配數組的doc

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

你是否真的需要這么大的陣列?

解決內存問題的一種方法可能是為矩陣創建matfile 我理解它的方式是它跳過內存並將其直接寫入硬盤。 我已經嘗試過這個對於我的懦弱的計算機內存來說太大的矩陣,而且它很慢,但確實有效。 你可能不得不一次建立它。

不,嗯,是的,買下更多的公羊,如下所述。 稀疏只刪除零元素。

在matlab中,您可以將新的col /行附加到矩陣中以生成更大的矩陣。

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

我認為使用硬盤文件存儲該數據是最佳選擇

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM