我正在從數據庫中檢索大量數據,我稍後使用散點圖進行繪圖。但是,我用完了內存,當我使用完整數據時程序中止。爲了記錄,運行該程序需要大於30分鐘,數據列表的長度大約爲20-30百萬。當繪圖時內存不足,Python
map = Basemap(projection='merc',
resolution = 'c', area_thresh = 10,
llcrnrlon=-180, llcrnrlat=-75,
urcrnrlon=180, urcrnrlat=82)
map.drawcoastlines(color='black')
# map.fillcontinents(color='#27ae60')
with lite.connect('database.db') as con:
start = 1406851200
end = 1409529600
cur = con.cursor()
cur.execute('SELECT latitude, longitude FROM plot WHERE unixtime >= {start} AND unixtime < {end}'.format(start = start, end = end))
data = cur.fetchall()
y,x = zip(*data)
x,y = map(x,y)
plt.scatter(x,y, s=0.05, alpha=0.7, color="#e74c3c", edgecolors='none')
plt.savefig('Plot.pdf')
plt.savefig('Plot.png')
我想我的問題可能在zip(*)函數中,但我真的沒有線索。我對如何通過重寫現有代碼來保存更多內存以及分解繪圖過程感興趣。我的想法是將時間段分成兩半,然後在保存該數字之前在兩個時間段內兩次做同樣的事情,但是我不確定這會對我有所幫助。如果問題實際上是陰謀,我不知道。
只是出於好奇,len(data)的輸出是什麼? –
目前我無法給出準確的答案,因爲它正在運行,但我估計它是大約24-30萬美元。 @nivixzixer – bjornasm
O.O在這種情況下,你可以嘗試「流」數據?一次處理幾百個繪圖點,直到您看到完整的圖像,而不是將所有3000萬個內存加載到內存中? –