首页 > 解决方案 > Matplotlib 在 Ubuntu 18.04 上引发 MemoryError 但在 Windows 10 上没有

问题描述

我正在为 Windows 用户在我的 Ubuntu 机器上开发软件。

它的作用:对数千张图像进行对象检测,并将结果与​​一些测量数据进行比较(示波器数据:~200MB,5000 万个数据值)。最后绘制并保存结果。在这一步之后,程序前进到下一个数据集,依此类推。在第二个数据集中,我得到了错误。

我已经安装了 Ubuntu 和 Windows 10 64 位版本。Python3 64bit 应该在两个操作系统上运行。

要启动 python 脚本,您只需运行它,它会在一个大的 for 循环中完成所有工作。基本步骤:

  1. 检测数据集 1 图像上的对象
  2. 做一些计算
  3. 使用 matplotlib 绘制结果并保存到文件
  4. 前进到下一个数据集
  5. 检测数据集 2 图像上的对象
  6. 做一些计算
  7. 绘制结果 [MemoryError]

由于仅复制整个 ErrorMessage 最终会破坏其格式,因此我必须在每一行之后插入换行符以使其可读:

Progress: Datensatz 1/2 ; Sequenz 2/4 ; Frame 99/101

Progress: Datensatz 1/2 ; Sequenz 2/4 ; Frame 100/101

Progress: Datensatz 1/2 ; Sequenz 2/4 ; Frame 101/101

Progress: Plot...

Traceback (most recent call last):

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py", line 1496, in _getbool_axis
    return self.obj._take(inds, axis=axis)

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py", line 2789, in _take
    verify=True)

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/internals.py", line 4539, in take
    axis=axis, allow_dups=True)

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/internals.py", line 4421, in reindex_indexer
    fill_tuple=(fill_value,))

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/internals.py", line 4501, in _slice_take_blocks_ax0
    fill_tuple=None))

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/internals.py", line 1254, in take_nd
    allow_fill=False)

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/algorithms.py", line 1653, in take_nd
    out = np.empty(out_shape, dtype=dtype, order='F')

MemoryError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "/home/artur/Desktop/UHF_Analyse_Artur/Firefly_Gesamt/UHF_Analyse.py", line 794, in <module>
    plot(gap_list, deg_list, timestamp, trc)

  File "/home/artur/Desktop/UHF_Analyse_Artur/Firefly_Gesamt/UHF_Analyse.py", line 306, in plot
    xticks = np.arange(df_oszi.index[0], df_oszi.index[-1], 1))

  File "/usr/local/lib/python3.6/dist-packages/pandas/plotting/_core.py", line 2941, in __call__
    sort_columns=sort_columns, **kwds)

  File "/usr/local/lib/python3.6/dist-packages/pandas/plotting/_core.py", line 1977, in plot_frame
    **kwds)

  File "/usr/local/lib/python3.6/dist-packages/pandas/plotting/_core.py", line 1804, in _plot
    plot_obj.generate()

  File "/usr/local/lib/python3.6/dist-packages/pandas/plotting/_core.py", line 258, in generate
    self._compute_plot_data()

  File "/usr/local/lib/python3.6/dist-packages/pandas/plotting/_core.py", line 363, in _compute_plot_data
    "timedelta"])

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/frame.py", line 3091, in select_dtypes
    return self.loc[com._get_info_slice(self, dtype_indexer)]

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py", line 1472, in __getitem__
    return self._getitem_tuple(key)

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py", line 890, in _getitem_tuple
    retval = getattr(retval, self.name)._getitem_axis(key, axis=i)

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py", line 1868, in _getitem_axis
    return self._getbool_axis(key, axis=axis)

  File "/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py", line 1498, in _getbool_axis
    raise self._exception(detail)

KeyError: MemoryError()

>>> Exception in Tkinter callback

Traceback (most recent call last):

  File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)

  File "/usr/lib/python3.6/tkinter/__init__.py", line 749, in callit
    func(*args)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/backends/_backend_tk.py", line 346, in idle_draw
    self.draw()

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/backends/backend_tkagg.py", line 9, in draw
    super(FigureCanvasTkAgg, self).draw()

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/backends/backend_agg.py", line 402, in draw
    self.figure.draw(self.renderer)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/artist.py", line 50, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/figure.py", line 1649, in draw
    renderer, self, artists, self.suppressComposite)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/image.py", line 138, in _draw_list_compositing_images
    a.draw(renderer)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/artist.py", line 50, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/axes/_base.py", line 2610, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/image.py", line 138, in _draw_list_compositing_images
    a.draw(renderer)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/artist.py", line 50, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/lines.py", line 736, in draw
    self._transform_path(subslice)

  File "/usr/local/lib/python3.6/dist-packages/matplotlib/lines.py", line 688, in _transform_path
    _path = Path(np.asarray(xy).T,

  File "/usr/local/lib/python3.6/dist-packages/numpy/core/numeric.py", line 492, in asarray
    return array(a, dtype, copy=False, order=order)

MemoryError

有趣的是,我MemoryError在 Ubuntu 上得到了,但在 Windows 上没有。我一直认为 python 在 Linux 上运行更可靠。知道如何解决这个问题吗?

标签: python-3.xmatplotlib

解决方案


推荐阅读