python - 尝试使用 matplotlib 绘制大型数组时出现内存错误

标签 python numpy matplotlib

我想绘制一个包含 2000 万个对象的数组,我有 8GB 内存,但在运行以下行时仍然出现以下错误:

import matplotlib.pyplot as plt
import numpy as np

d = np.arange(200000000)
plt.plot(d)
plt.show()

错误:

Traceback (most recent call last):
...
  File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 317, in _grab_next_args
    for seg in self._plot_args(remaining, kwargs):
  File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 292, in _plot_args
    x = np.arange(y.shape[0], dtype=float)
MemoryError

最佳答案

由于显示器和绘图仪的物理限制,无论如何您都无法绘制 20,000,000 个点。因此,您可以通过对其进行采样或使用切片来减少数组:

>>> m = 20000000
>>> a = np.arange(m)
>>> n = 100 # <- reducing to 100 points
>>> s = m/n # <- size of slices to compress
>>> reduced = []
>>> for i in xrange(n):
...     slice = a[i*s:(i+1)*s]
...     reduced.append(np.mean(slice))
>>> reduced
[99999.5, 299999.5, ..., 19699999.5, 19899999.5]

.. 假设 np.mean 对您正在绘制的对象有意义。

关于python - 尝试使用 matplotlib 绘制大型数组时出现内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7284538/

相关文章:

python - 为什么 matplotlib(python)中的 cohere 函数给出的答案与 MATLAB 中的 mscohere 函数不同?

python - 正确替换 python3 中的 QString().arg 方法

python - 使用 pyscreenshot 截取元素屏幕截图

python - 逻辑函数错误分类

python - 你如何查看一个 numpy 广播对象?

matplotlib - 无法在 Tmux 中使用事件的 IPython/Matplotlib 正确退出 SSH session

python - 在后台python中作为线程运行函数并在其应用程序之前退出

python - 如何使用 python 3 抓取亚马逊数据

python - 如何根据keras中的条件替换张量的某些部分?

python - 等高线图python中的长错误