我的X轴范围是0到4294967296(即2^32),也就是说,我想在matplotlib中在X轴上打印到4294967296。但我得到的错误是“记忆错误”。在
如何避免内存错误?在
File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 3161, in plot
ret = ax.plot(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/matplotlib/__init__.py", line 1819, in inner
return func(ax, *args, **kwargs)
File "/usr/lib64/python2.7/site-packages/matplotlib/axes/_axes.py", line 1383, in plot
self.add_line(line)
File "/usr/lib64/python2.7/site-packages/matplotlib/axes/_base.py", line 1703, in add_line
self._update_line_limits(line)
File "/usr/lib64/python2.7/site-packages/matplotlib/axes/_base.py", line 1725, in _update_line_limits
path = line.get_path()
File "/usr/lib64/python2.7/site-packages/matplotlib/lines.py", line 938, in get_path
self.recache()
File "/usr/lib64/python2.7/site-packages/matplotlib/lines.py", line 647, in recache
self._xy = np.empty((len(x), 2), dtype=np.float_)
MemoryError
看起来你要绘制大量的采样点。这有很多问题。在
首先,你的屏幕有多少像素?在绘制的图形上,您希望有多少数据是可见的?远远低于2^32的价值。在
另一个问题是记忆问题。Matplotlib不是用来处理打印数据集的,这些数据集可能不适合运行它的机器的物理内存。那么,解决办法是什么?在
下采样。在
如何实现这一点将取决于数据所代表的函数类型。它是否单调地减少/增加?数据波动有多快?要了解准确表示时间序列数据以供人类解释的问题,请快速阅读this硕士论文(“用于可视化表示的向下采样时间序列”,作者:Sveinn Steinarsson)。在
如果y数据代表累积分布(假设波动缓慢且单调增加),则可以简单地对每个n个元素进行采样,如下所示:
请注意,}必须是Numpy数组才能使此切片工作。在
y_old
和{相关问题 更多 >
编程相关推荐