获取内存错误:在matplotlib中打印大值时

2024-05-19 02:25:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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


Tags: pathinpyselfplotmatplotlibpackagesusr
1条回答
网友
1楼 · 发布于 2024-05-19 02:25:38

看起来你要绘制大量的采样点。这有很多问题。在

首先,你的屏幕有多少像素?在绘制的图形上,您希望有多少数据是可见的?远远低于2^32的价值。在

另一个问题是记忆问题。Matplotlib不是用来处理打印数据集的,这些数据集可能不适合运行它的机器的物理内存。那么,解决办法是什么?在

下采样。在

如何实现这一点将取决于数据所代表的函数类型。它是否单调地减少/增加?数据波动有多快?要了解准确表示时间序列数据以供人类解释的问题,请快速阅读this硕士论文(“用于可视化表示的向下采样时间序列”,作者:Sveinn Steinarsson)。在

如果y数据代表累积分布(假设波动缓慢且单调增加),则可以简单地对每个n个元素进行采样,如下所示:

step_size = 2**20
x = x_old[::step_size]
y = y_old[::step_size]

请注意,y_old和{}必须是Numpy数组才能使此切片工作。在

相关问题 更多 >

    热门问题