Matplotlib hexbin内存错误

时间:2013-02-28 15:21:36

标签: python matplotlib

我正在尝试在python中创建一个相当大的数据集的hexbin图。包含数据的两个数组长度为3500万个条目。但是,它们只占用1.5 GB的内存,而且我有超过4 GB的可用内存。 Hexbin因内存错误而失败。

*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
File "plotmodel.py", line 20, in <module>
plt.hexbin(d,t,m, bins='log', gridsize=20, xscale='log', lw=1, edgecolors='black',    alpha=0.8, cmap=plt.cm.jet)
File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/pyplot.py", line 2142, in hexbin
ret = ax.hexbin(x, y, C, gridsize, bins, xscale, yscale, extent, cmap, norm, vmin, vmax, alpha, linewidths, edgecolors, reduce_C_function, mincnt, marginals, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/site-packages/matplotlib/axes.py", line 6035, in hexbin
iy2 = np.floor(y).astype(int)
MemoryError

为什么hexbin不能处理大型数据集还是由于硬件限制而导致的错误有什么根本原因吗?

1 个答案:

答案 0 :(得分:1)

看起来hexbin会生成几个与输入数据大小相同的np.ndarray(按粗略计算,我得 8 !)。没有任何关于此的 fundemental ,它是以这种方式编写的,它是为了使矢量化速度从numpy开始。

我建议将hexbin拉出mpl,将其分成三部分,第一部分设置六边形的细节,第二部分将数据添加到accum数组(所以你可以在块中处理数据),第三部分采用accum和第一部分的输出来实际绘制图。