2014-03-31 42 views
1

我需要形成總尺寸爲2,886 X 2,003,817的2D矩陣。我嘗試使用numpy.zeros製作二維零元素矩陣,然後計算並分配矩陣的每個元素(其中大部分都是零子,我需要替換其中的幾個)。用於大數據的陣列

但是當我嘗試numpy.zero初始化我的矩陣我碰到下面的內存錯誤:

C=numpy.zeros((2886,2003817)) "MemoryError" 

我也嘗試以形成沒有初始化的矩陣。基本上我計算每行的元素在我的算法的每次迭代,然後

C=numpy.concatenate((C,[A]),axis=0) 

其中C是我的最終矩陣,A是在當前迭代計算出的行。但我發現這種方法需要很多時間,我猜這是因爲使用numpy.concatenate(?)

請問我是否有辦法避免在初始化我的矩陣時出現內存錯誤或有沒有更好的方法或建議來形成這種大小的矩陣?

感謝, 阿米爾

+2

你應該使用'scipy.sparse'矩陣。 – Akavall

+1

numpy.zeros的默認數據類型是numpy.float64(一個8字節的浮點數)。因此,矩陣的基本內存需求是2,886 * 2,003,817 * 8字節== 44.1 GB的RAM。 –

回答

2

如果你的數據有很多是零,你應該使用scipy.sparse矩陣。

這是一個特殊的數據結構,旨在爲有很多零的矩陣節省內存。但是,如果你的矩陣不是稀疏的,稀疏矩陣開始佔用更多的內存。稀疏矩陣有很多種類,每種都有效,但在另一件事情上卻效率低下,所以要小心你選擇的東西。