gpt4 book ai didi

python - 处理大数据时出现内存错误

转载 作者:行者123 更新时间:2023-11-30 23:49:05 25 4
gpt4 key购买 nike

我想使用 matplotlib 绘制直方图。但是,由于我发送到 hist() 函数的数据量很大(包含大约 100,000 个数字的列表),因此在绘制两个数字时会出现错误。但只绘制两个图中的一个就可以顺利进行。有人能帮我解决这个问题吗?提前致谢。

这是显示错误的简化代码:

f_120 = plt.figure(1)
plt.hist(taccept_list, bins=6000000, normed = True, histtype ="step", cumulative = True, color = 'b', label = 'accepted answer')
plt.hist(tfirst_list, bins=6000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')
plt.axvline(x = 30, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '30 min')
plt.axvline(x = 60, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 hour')
plt.legend()

plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')
plt.title('Cumulative histogram: time elapsed \n before questions receive answer (first 2 hrs)')
plt.ylim(0,1)
plt.xlim(0,120)
f_120.show()
f_120.savefig('7month_0_120.png', format = 'png' )
plt.close()

f_2640 = plt.figure(2)
plt.hist(taccept_list, bins=6000000, normed = True, histtype ="step", cumulative = True, color = 'b', label = 'accepted answer')
plt.hist(tfirst_list, bins=6000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')
plt.axvline(x = 240, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '4 hours')
plt.axvline(x = 1440, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 day')
plt.legend(loc= 4)

plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')
plt.title('Cumulative histogram: time elapsed \n before questions receive answer (first 48)')
plt.ylim(0,1)
plt.xlim(0,2640)
f_2640.show()
f_2640.savefig('7month_0_2640.png', format = 'png' )

以下是错误详细信息:

plt.hist(tfirst_list, bins=6000000,normed = True, histt​​ype ="step",cumulative = True, color = 'g',label = '第一个答案')

文件“C:\software\Python26\lib\site-packages\matplotlib\pyplot.py”,第 2160 行,在 hist 中 ret = ax.hist(x, bins, range,normed, 权重, 累积, 底部, histt​​ype, 对齐, 方向, rwidth, log, 颜色, label, **kwargs)

文件“C:\software\Python26\lib\site-packages\matplotlib\axes.py”,第 7775 行,在 hist 中 关闭=False,edgecolor=c,填充=False))

文件“C:\software\Python26\lib\site-packages\matplotlib\axes.py”,第6384行,填充 对于 self._get_patches_for_fill(*args, **kwargs) 中的多边形:

文件“C:\software\Python26\lib\site-packages\matplotlib\axes.py”,第 317 行,位于 _grab_next_args 中 对于 self._plot_args 中的 seg(剩余,kwargs):

文件“C:\software\Python26\lib\site-packages\matplotlib\axes.py”,第 304 行,位于 _plot_args 中 seg = func(x[:,j%ncx], y[:,j%ncy], kw, kwargs)

文件“C:\software\Python26\lib\site-packages\matplotlib\axes.py”,第 263 行,在 _makefill 中 (x[:,np.newaxis],y[:,np.newaxis])),

文件“C:\software\Python26\lib\site-packages\numpy\core\shape_base.py”,第 270 行,在 hstack 中 返回_nx.concatenate(map(atleast_1d,tup),1)

内存错误

最佳答案

正如其他人所指出的,六百万个垃圾箱听起来并不是很有用。但一个简单的事情是重用相同的图形:因为唯一改变的绘图元素是直方图以外的东西,所以尝试这样的事情:

vline1 = plt.axvline(...)
vline2 = plt.axvline(...)
lgd = legend()

在 savefig 之后,不要关闭图形并绘制新的直方图,而是重用它,更改需要更改的内容:

# change vline1 and vline2 positions and labels
vline1.set_data([240,240],[0,1])
vline1.set_label('new label')
vline2.set_data(...)
vline2.set_label(...)
# remove old legend, replace with new
lgd.remove()
lgd = plt.legend(loc=4)
plt.xlabel('new xlabel')
# etc

最后使用新文件名再次调用 savefig。

关于python - 处理大数据时出现内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785958/

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