【问题标题】:Memory error when plotting large array with spyder使用 spyder 绘制大型数组时出现内存错误
【发布时间】:2017-02-21 08:23:07
【问题描述】:

我在使用 spyder 在 python 2.7 上绘制大数据时遇到问题。

X、Y 和 Z 大约有 560,000 个数组长度......这很多!

# ======
## plot:

fig = plt.figure("Map 3D couleurs")
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
ax.set_title("Map 3D couleurs")

#ax.xaxis.set_major_locator(MaxNLocator(5))
#ax.yaxis.set_major_locator(MaxNLocator(6))
#ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()

plt.show();

Python 回复这个:

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_qt5.py", line 427, in idle_draw
    self.draw()
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 148, in draw
    FigureCanvasAgg.draw(self)
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py", line 469, in draw
    self.figure.draw(self.renderer)
  File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 1085, in draw
    func(*args)
  File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 254, in draw
    for col in self.collections]
  File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\art3d.py", line 580, in do_3d_projection
    PolyCollection.set_verts(self, segments_2d)
  File "C:\Python27\lib\site-packages\matplotlib\collections.py", line 842, in set_verts
    self._paths.append(mpath.Path(xy, codes))
MemoryError

你有在 python 2.7 上解决这个问题的想法吗? 可能是其他库、函数...还是停止使用 python?

【问题讨论】:

    标签: python python-2.7 memory matplotlib


    【解决方案1】:

    尝试部分读取文件,不要一次设置数据 例如在一行中只放一个数据 然后读取一个元组 (x,y,z) 并绘制并重复该操作

    【讨论】:

      【解决方案2】:

      您是否需要长度为560'000 的数组的详细信息量?如果没有,您可以轻松地对数组进行子采样,例如:

      n = 1000   # sample every n-th data point
      surf = ax.plot_trisurf(Xs[::n], Ys[::n], Zs[::n], cmap=cm.jet, linewidth=0)
      

      【讨论】:

      • 这是个好主意,但是您知道可以轻松绘制它的库/函数吗?可能是显卡问题?
      • 没有很多其他的 Python 绘图库,所以没有......而且我想任何更快的实现都会像我提到的子采样一样应用一些简化;从 50 万个数据点创建曲面图非常昂贵。
      猜你喜欢
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 2018-09-15
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多