gpt4 book ai didi

python - 绘图时内存不足,Python

转载 作者:行者123 更新时间:2023-11-28 17:36:23 25 4
gpt4 key购买 nike

我正在从数据库中检索大量数据,稍后我使用散点图绘制这些数据。但是,我的内存不足,当我使用全部数据时程序中止。仅供引用,运行该程序需要>30分钟,数据列表长度约为20-3000万。

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(*) 函数上,但我真的不知道。我对如何通过重写现有代码来保留更多内存以及拆分绘图过程都很感兴趣。我的想法是将时间段分成两半,然后在保存数字之前对两个时间段做同样的事情两次,但是我不确定这是否对我有帮助。如果问题是实际绘制它,我不知道。

最佳答案

如果您认为问题出在 zip 函数上,为什么不使用 matplotlib 数组将您的数据转换为正确的格式呢?像这样:

data = numpy.array(cur.fetchall())
lat = data[:,0]
lon = data[:,1]
x,y = map(lon, lat)

此外,您生成的 PDF 将非常大,并且在各种 PDF 阅读器中呈现速度很慢,因为默认情况下它是矢量化格式。您所有的数百万个数据点都将存储为 float ,并在用户打开文档时呈现。我建议您将 rasterized=True 参数添加到您的 plt.scatter() 调用中。这会将结果保存为 PDF 中的位图(请参阅文档 here)

如果这一切都没有帮助,我会通过注释掉从后面开始的行来进一步调查。也就是说,首先注释掉 plt.savefig('Plot.png') 并查看内存使用是否下降。如果不是,请注释掉之前的行等。

关于python - 绘图时内存不足,Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30108627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com