2017-08-28 49 views
0

我必須爲一些計算初始化一個大的二維數組。我在運行代碼時遇到「內存錯誤」。如下面在Python中處理大型二維數組

a=np.zeros((200000,200000)) ## I get memory error in this line 

for i in range (0,len(rows)): 
    for j in range (0,len(rows)): 
     if pq[rows[i],cols[j]]>0: 
      a[rows[i],cols[j]]=1 
     else: 
      a[rows[i],cols[j]]=0 

這裏給出的代碼,「行」和「COLS」是長度的一維數組200000 PQ的維度433 X 800

我使用的是64位的Windows 10系統採用英特爾®酷睿™i7-4770S CPU @ 3.10GHz×8處理器,16 Gb RAM。我正在使用Python 2.7.12。

任何幫助克服這個問題將不勝感激。我是python的新手,並且提前感謝你。

使用pyTables或generator可以解決這個問題嗎?我剛剛在網上閱讀了他們。

+0

難道是因爲它無法分配一個大的連續內存空間嗎? 你可以試試把它分成4個更小的陣列嗎? –

+0

我需要這個數組作爲進一步計算的輸入。它不能被分解成小陣列。 – user30

回答

3

首先,你還沒有提到你的python架構。如果它是32位,那麼它有2GB的RAM限制。

其次,200000 * 200000 * 1字節(至少,對於一個小的整數)= 37 Gb這比你的RAM小,所以你不能以任何方式分配它。第三,你的數據很稀疏,我的意思是你的數組大部分都是零。在這種情況下,不應該分配數組,而應該存儲數據的座標(並且已經在pq中有這個座標),並重新制作算法以處理這種數據表示。

+0

我的Python架構是64位。我很抱歉沒有提到它。我需要'數組'a作爲輸入以進一步計算。 – user30

2

問題是你的矩陣真的很大。 通過假設每個單元1個字節(被低估),您的矩陣需要200000 * 200000 = 40GB來完全存儲!

我建議你看看Sparse Matrixes。這是一個只存儲非零值的矩陣,在您的情況下會節省大量空間。