Numpy 和 matplotlib 垃圾收集

2024-01-04

我有一个 python 脚本,它对不同的参数进行许多模拟(Q, K),绘制结果并将其存储到磁盘。

每组参数(Q,K)生成 200x200x80 数据点的 3D 体积网格,这需要约 100 MB 的数据。然后逐层绘制该体积网格的一部分,生成约 60 张图像。

问题是python在这个过程中显然没有释放内存。我不确定内存泄漏在哪里,或者控制 python 如何决定释放哪些对象的规则是什么。我也不确定记忆是否丢失了numpy数组或在matplotlib图形对象。

  1. 有没有一个简单的分析方法python 中哪些对象保留在内存中,哪些对象被自动释放?
  2. 有没有一种强制 python 释放所有数组和图形对象的方法哪些是在特定循环或特定函数调用中创建的?

代码的相关部分在这里(但是,它不会运行......模拟代码的较大部分包括ctypesC++/python接口因太复杂而省略):

import numpy as np
import matplotlib.pyplot as plt
import ProbeParticle as PP # this is my C++/Python simulation library, take it as blackbox

def relaxedScan3D( xTips, yTips, zTips ):
    ntips = len(zTips); 
    print " zTips : ",zTips
    rTips = np.zeros((ntips,3)) # is this array deallocated when exiting the function?
    rs    = np.zeros((ntips,3)) # and this?
    fs    = np.zeros((ntips,3)) # and this?
    rTips[:,0] = 1.0
    rTips[:,1] = 1.0
    rTips[:,2] = zTips 
    fzs    = np.zeros(( len(zTips), len(yTips ), len(xTips ) )); # and this?
    for ix,x in enumerate( xTips  ):
        print "relax ix:", ix
        rTips[:,0] = x
        for iy,y in enumerate( yTips  ):
            rTips[:,1] = y
            itrav = PP.relaxTipStroke( rTips, rs, fs ) / float( len(zTips) )
            fzs[:,iy,ix] = fs[:,2].copy()
    return fzs


def plotImages( prefix, F, slices ):
    for ii,i in enumerate(slices):
        print " plotting ", i
        plt.figure( figsize=( 10,10 ) ) # Is this figure deallocated when exiting the function ?
        plt.imshow( F[i], origin='image', interpolation=PP.params['imageInterpolation'], cmap=PP.params['colorscale'], extent=extent )
        z = zTips[i] - PP.params['moleculeShift' ][2]
        plt.colorbar();
        plt.xlabel(r' Tip_x $\AA$')
        plt.ylabel(r' Tip_y $\AA$')
        plt.title( r"Tip_z = %2.2f $\AA$" %z  )
        plt.savefig( prefix+'_%3.3i.png' %i, bbox_inches='tight' )

Ks = [ 0.125, 0.25, 0.5, 1.0 ]
Qs = [ -0.4, -0.3, -0.2, -0.1, 0.0, +0.1, +0.2, +0.3, +0.4 ]

for iq,Q in enumerate( Qs ):
    FF = FFLJ + FFel * Q
    PP.setFF_Pointer( FF )
    for ik,K in enumerate( Ks ):
        dirname = "Q%1.2fK%1.2f" %(Q,K)
        os.makedirs( dirname )
        PP.setTip( kSpring = np.array((K,K,0.0))/-PP.eVA_Nm )
        fzs = relaxedScan3D( xTips, yTips, zTips ) # is memory of "fzs" recycled or does it consume more memory each cycle of the loop ?
        PP.saveXSF( dirname+'/OutFz.xsf', headScan, lvecScan, fzs )
        dfs = PP.Fz2df( fzs, dz = dz, k0 = PP.params['kCantilever'], f0=PP.params['f0Cantilever'], n=int(PP.params['Amplitude']/dz) ) # is memory of "dfs" recycled?
        plotImages( dirname+"/df", dfs, slices = range( 0, len(dfs) ) )

尝试重用你的人物:

plt.figure(0, figsize=(10, 10))
plt.clf() #clears figure

或保存后关闭图形:

...
plt.savefig(...)
plt.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Numpy 和 matplotlib 垃圾收集 的相关文章

  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 绘制与Fig.show()内联的IPython Notebook图形?

    我正在使用 IPython Notebook 调用内联模式 pylab inline 以下代码立即在单元格处绘制一个图形 fig plt figure axes fig add axes 0 0 1 1 不过 我想在一个单元格中创建绘图 轴
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • JavaScript按键事件获取文本区域的最终值

    我想知道是否有可能得到最终结果keypress事件 目前 我正在使用keyup因为它被激活了after用户已经在 texteara 中完成了文本编辑 但我编写了一个使用 Mootools 库执行类似操作的方法 input addEvent
  • “ASP.business_aspx”不包含“submitSearchClick”的定义,并且没有扩展方法“submitSearchClick”

    每次我尝试在我的网站上运行页面时 我都会不断弹出此错误 ASP business aspx 不包含 submitSearchClick 的定义 并且找不到接受 ASP business aspx 类型的第一个参数的扩展方法 submitSe
  • 有没有更好的方法来解析字符串?

    我想知道 NET 中是否有内置方法来解析字符串的位 以我有以下字符串为例 bsarbirthd0692 由以下部分组成 稍后将交叉引用数据 Indexes Purpose 0 3 name 4 9 description 10 13 dat
  • Windows API 有滚动条控件吗?

    在Delphi中 有一个组件叫做TScrollBox 它允许您将滚动条添加到TImage成分 我需要在纯 Windows API 中向图像添加滚动条 那么Windows API有这样的控件吗 我找到的只有这个1993年文章 https ms
  • TestCafe 有没有办法验证 Chrome 网络调用?

    我有一个测试用例 我需要导航到网页并验证该页面的 chrome 浏览器中的网络调用 理想情况下 我会将它们放入一个变量中 并针对某些与分析相关的调用过滤它们并验证它们的值 这可以通过 Selenium 中的 chrome 功能来完成 请参阅
  • 使用 FBO 渲染多个深度信息

    我正在尝试实现一个着色器 计算通过两个表面的光折射 物体的背面和正面 为此 我需要使用正常深度测试 GL LESS 和反向深度测试 GL GREATER 渲染折射几何形状 它允许我计算从背面到正面的距离 不幸的是 我一次只能渲染其中一个 而
  • 通过 ansible playbook 从 git 克隆特定分支

    我正在使用 ansible 来部署我的应用程序 我使用以下命令从 github 克隆应用程序 name Deploy site files from Github repository sudo yes git email protecte
  • Spark-将 JavaRDD 保存到 Cassandra

    This link http www datastax com dev blog accessing cassandra from spark in java显示了一种保存方法JavaRDD to Cassandra这样 import st
  • npm 警告已弃用 [电子邮件受保护]:graceful-fs 版本 3

    我正在运行 npm install 但它给了我一个错误 我还尝试在更新之前运行以下命令 npm install npm 并且我还更新了 Graceful fs npm install g graceful fs email protecte
  • javax.ws.rs.ProcessingException:找不到内容类型 application/json 的 writer

    我是 REST Web 服务的新手 我正在尝试 post 和 consumes 注释 如下所示 POST Path post Consumes application json public Response createProductIn
  • Google App Engine 和 jQuery Ajax 导致管道损坏错误

    我有一个非常标准的案例 我尝试通过 jQuery 的 Ajax 提交一些 JSON 数据 我的 JavaScript 代码如下所示
  • Fragment onResume() 和 backStack 问题

    当我从另一个片段回来时 我陷入了恢复片段的困境 设想 我有一个Fragment A 现在我正在打开多个片段Fragment A say A1 A2 A3 使用框架布局 现在我正在启动一个新的片段说Fragment B从 A1 A2 A3 之
  • jQuery 显示 setTimeout 计时器

    我正在尝试构建一个简单的倒计时应用程序 是否可以在 setTimeout 上显示计时器值 或者我必须使用 for 循环 Thanks with setTimeout var n 100 setTimeout countDown 1000 f
  • SimpleCursorAdapter 和 CursorAdapter

    我想知道 CursorAdapter 和 SimpleCursorAdapter 之间有什么区别 人们会根据什么标准选择其中之一 您与他们合作的经历 谢谢 我认为主要问题还没有得到解答 SimpleCursorAdapter 的存在是为了那
  • Java 中的尾部调用优化

    从 Java 8 开始 Java 不提供尾部调用优化 TCO 经过研究 我了解到这是 在 JDK 类中 有许多安全敏感方法 它们依赖于计算 JDK 库代码和调用代码之间的堆栈帧来确定谁在调用它们 然而 基于 JVM 的 Scala 支持尾部
  • 文件丢失 在文件系统中,捕获表单提交

    我有一个通过 jQuery 提交的表单ajaxSubmit 功能 此表单包含一个文件控件 并且已提出一个可能的故障点 如果在提交表单之前所选文件被重命名 删除或以其他方式变得不可访问 则该表单可能会或可能不会根据浏览器提交 虽然提交失败是预
  • 使用 PyDict_SetItemString 进行引用计数

    我想知道当将新值设置到 PyDict 在 C 扩展内 内的现有字段中时 内存管理 引用计数如何工作 例如 假设按以下方式创建和填充字典 myPyDict PyDict New tempPyObj PyString FromString Or
  • 读取科学计数法 scanf

    我正在开发一个程序 它应该只有一个 scanf 函数 并且应该能够接受科学计数法和实数的输入 任何帮助将不胜感激 根据scanf文档 http en cppreference com w c io fscanf f匹配浮点数 数字的格式与预
  • 通过初始化列表实例化抽象类[重复]

    这个问题在这里已经有答案了 我想了解为什么编译器允许编译以下代码 include
  • Numpy 和 matplotlib 垃圾收集

    我有一个 python 脚本 它对不同的参数进行许多模拟 Q K 绘制结果并将其存储到磁盘 每组参数 Q K 生成 200x200x80 数据点的 3D 体积网格 这需要约 100 MB 的数据 然后逐层绘制该体积网格的一部分 生成约 60