我正在从数据库中检索大量数据,我稍后使用散点图进行绘图。但是,我用完了内存,当我使用完整数据时程序中止。为了记录,运行该程序需要大于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万个内存加载到内存中? –