首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存满Python打印3d

内存满Python打印3d
EN

Stack Overflow用户
提问于 2013-05-28 23:12:42
回答 2查看 5.2K关注 0票数 4

在循环中绘制图像时,我遇到了一些内存问题。如何删除旧的?

错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\Alex\Dropbox\code stuff\solarsystem.py", line 69, in <module>
    fig = plt.figure()
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 343, in figure
    **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 79, in new_figure_manager
    return new_figure_manager_given_figure(num, figure)
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 106, in new_figure_manager_given_figure
    canvas = FigureCanvasTkAgg(figure, master=window)
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 225, in __init__
    master=self._tkcanvas, width=w, height=h)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 3306, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 3262, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
TclError: not enough free memory for image buffer

脚本:

代码语言:javascript
复制
count = 0
xy = bodies[0][2]
x = [[a[0] for a in bodies[0][2]]]
y = [[a[1] for a in bodies[0][2]]]
z = [[a[2] for a in bodies[0][2]]]

for i in range(1,nbodies):
    x.append([a[0] for a in bodies[i][2]])
    y.append([a[1] for a in bodies[i][2]])
    z.append([a[2] for a in bodies[i][2]])

for j in range(0,len(bodies[0][2])-1,10):
    Xc = [[x[0][j]]]
    Yc = [[y[0][j]]]
    Zc = [[z[0][j]]]
    for k in range(1,nbodies):
        Xc.append([x[k][j]])
        Yc.append([y[k][j]])
        Zc.append([z[k][j]])

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    for l in range(len(Xc)):
        ax.scatter( Xc[l], Yc[l], Zc[l], c=(i/nbodies,i/nbodies,i/nbodies))

    ax.axis([-400, 400, -400, 400])
    ax.set_zlim(-400, 400)

    pylab.savefig('images/img'+str(count))
    pylab.clf()
    count += 1

    percent = (j/(len(bodies[0][2])-1.))*100
    if percent % 10 ==0:
        print percent
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-28 23:44:43

如果要生成大量图片,则不仅需要调用

代码语言:javascript
复制
plt.clf()

函数,但也包括

代码语言:javascript
复制
plt.close()

图片之间的函数(即after the for j in range(0,len(bodies[0][2])-1,10):循环完成)

票数 3
EN

Stack Overflow用户

发布于 2013-05-28 23:27:32

您可以使用以下命令删除fig实例(在使用完它之后

代码语言:javascript
复制
del fig

你可以用os.unlink删除这些文件

代码语言:javascript
复制
os.unlink('images/img'+str(count))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16795556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档