Python垃圾回收如何使用numpy数组追加和删除?

2024-02-07

我正在尝试调整在计时器上更新的绘图代码(matplotlib)的底层结构,从使用 Python 列表绘制数据到使用 numpy 数组。我希望能够尽可能降低绘图的时间步长,并且由于数据可能会达到数千个点,如果不能的话,我就会开始快速浪费宝贵的时间。我知道 numpy 数组更适合这类事情,但我很难弄清楚何时需要像 Python 程序员一样思考,何时需要像 C++ 程序员一样思考以最大限度地提高内存访问效率。

在 scipy.org 文档中,append() 函数表示它返回附加在一起的数组的副本。所有这些副本是否都得到正确的垃圾收集?例如:

import numpy as np

a = np.arange(10)
a = np.append(a,10)
print a

这是我对 C++ 级别发生的事情的阅读,但如果我知道我在说什么,我就不会问这个问题,所以如果我错了,请纠正我! =P

首先分配 10 个整数的块,符号 a 指向该块的开头。然后分配一个包含 11 个整数的新块,总共使用 21 个整数(84 字节)。然后 a 指针被移动到 11-int 块的开头。我的猜测是,这将导致垃圾收集算法将 10-int 块的引用计数减少到零并取消分配它。这是正确的吗?如果不是,如何确保附加时不会产生开销?

我也不确定在使用完 numpy 数组后如何正确删除它。我的绘图上有一个重置按钮,它只会清除所有数据并重新开始。当我有列表时,这是使用完成的del data[:]。 numpy 数组有等效的函数吗?或者我应该只说 data = np.array([]) 并依靠垃圾收集器来为我完成工作?


自动内存管理的要点是你不需要考虑它。在您编写的代码中,副本将被很好地进行垃圾收集(几乎不可能混淆 Python 的内存管理)。然而,因为np.append不是就地,代码将在内存中创建一个新数组(包含a and 10)然后是变量a将更新为指向这个新数组。自从a现在不再指向引用计数为 1 的原始数组,其引用计数将递减为 0,并且将自动清除。您可以使用gc.collect http://docs.python.org/library/gc.html#gc.collect强制进行全面清理。

Python 的优势并不在于微调内存访问,尽管可以进行优化。您可能是最好的预分配排序a(使用例如a = np.zeros( <size> ));如果你需要比这更精细的调整,它就会开始变得有点毛茸茸的。你可以看看Cython + Numpy 教程 http://wiki.cython.org/tutorials/numpy以一种非常简洁的方式将 C 与 Python 集成以提高效率。

Python中的变量只是指向其内容存储的位置;你可以del任何变量都会将其目标的引用计数减一。当目标的引用计数为零后,目标将被自动清理。这样做的寓意是,不要担心清理你的记忆。它会自动发生。

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

Python垃圾回收如何使用numpy数组追加和删除? 的相关文章

随机推荐

  • 8 拼图有多少种可能的状态?

    经典的 8 块拼图属于滑块家族 我的书 人工智能 一种现代方法 作者 斯图尔特 拉塞尔 Stuart Russell 和彼得 诺维格 Peter Norwig 说 8 个难题9 2可能的状态 但为什么 2 你怎么得到这个 9 是拼图的可能配
  • 从 vb.net 执行 python 脚本

    如何从 VB NET 代码中执行 python 脚本 我想使用 VB NET 为我的 python 脚本构建 GUI 这是为了能够为脚本用户创建 GUI 我找到了这个例子 Shell c Program Files python 266 p
  • Karma 无法加载 webpack

    我收到此错误 16 07 2015 13 03 52 741 WARN preprocess Can not load webpack Error Can not resolve circular dependency Resolving
  • 用于拨打电话的 Web API [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有可以打电话的API进行电话交谈在网络中 也许基于 Flash 例如 Skype 但无需安装软件
  • 在 PHP 中何时使用类与函数

    灯泡还没有亮起来 我真的很喜欢一个易于理解的解释 说明在 php 中使用类比仅使用函数的优势 这是我现在的想法的一个简单例子 我想知道一个类是否更有效 假设我有一个用 php 构建的迷你日历小部件 我正在考虑调用该函数miniCal arr
  • 无法从 WSL2 docker 容器连接到 WSL2 本地主机服务器

    我正在运行一个简单的网络服务器https 0 0 0 0 4000 https 0 0 0 0 4000 也可以作为https local phx cd shoeping at 4000 https local phx cd shoeppi
  • 如何在 AuthenticationTokenCreateContext 中设置错误?

    我必须在 AuthenticationTokenCreateContext 中设置错误 可以使用 context SetError 在 OAuthValidateClientAuthenticationContext 中设置错误 但在 Au
  • 使用 g++ 编译 c++14 代码

    我在 Ubuntu 14 04 LTS 上使用 g 4 8 4 当尝试使用 std c 14 进行编译时 出现以下错误 g error unrecognized command line option std c 14 使用 std c 1
  • 性能监视器 .NET CLR Networking 4.0.0.0 实例命名

    我正在尝试使用性能计数器来确定我的应用程序已发送或接收的字节数 我按照此处找到的建议解决方案进行操作 计算带宽 https stackoverflow com questions 442409 c bandwidth 但我的应用程序实例没有
  • C语言AVL树

    我目前正在做一个需要使用AVL树的项目 我为 avl 编写的插入函数似乎不起作用 它最多适用于 3 或 4 个节点 我将衷心感谢您的帮助 尝试如下 Tree insert Tree t char name 80 int num if t N
  • Android 的 Flutter 签名版本未打开,但所有调试版本都工作正常?

    应用程序的调试版本工作正常 但签名的版本未打开 安装签名版本后 它显示如下 然后无法移动到应用程序的启动屏幕 我尝试了堆栈溢出上可用的所有解决方案 但对于这种情况没有任何作用 None
  • Windows 8 WinRT KeyboardCapability.KeyboardPresent 始终为 true

    我们使用 KeyboardCapability KeyboardPresent 来测试键盘是否连接到设备 bool hasKeyboard new KeyboardCapabilities KeyboardPresent 1 不幸的是 无论
  • 页面加载后 Jquery addClass

    我想知道为什么执行 jQuery 代码addClass页面渲染后的函数 我有一些元素 h1 绝对定位 该元素有规则 left 60 和简单的JS document ready function test find header find h
  • Spring Cloud Gateway 或 Zuul2,哪一个是 Zuul1 的正确替代品?

    由于 Spring Cloud 团队已经放弃了 Zuul 模块的开发 我们正在转向 Spring Cloud Gateway 或 Zuul2 但我相信 Zuul2 需要在架构上进行大量更改 并且需要在微服务上进行重大更改 如果我错了 请纠正
  • 阻止离线 iPhone Web 应用程序在 Safari 中打开链接

    我正在开发一个可以在离线模式下与移动 Safari 配合使用的网站 我可以将其添加到主屏幕上并从那里加载 但是 一旦从主屏幕打开 单击某些链接将跳出应用程序并在移动 safari 中打开 尽管我在所有链接单击上阻止了 Default 该应用
  • 维护一个与上游同步的分支

    我计划根据 github 上的项目添加一些代码 例如添加一些适合我的项目的定制选项 一个想法是分叉并创建一个分支来包含我的所有更改 每当上游有新的更改时 我都会获取它们并将其重新设置到我的分支 假设这些是我的遥控器 git remote v
  • 带有 Maven 子模块的 gradle

    有什么方法可以使用 maven 子模块构建 gradle 项目吗 我在 gradle 中创建了一个项目 但现在我必须添加模块 该模块使用了 Maven 我不知道如何使用它 有什么好的办法吗 我将非常感谢任何建议 将 Maven 项目转换为
  • XmlSerializer 和 System.Drawing.Color 的最佳解决方案

    System Drawing Color 对象显然不会使用 XmlSerializer 进行序列化 xml 序列化颜色的最佳方法是什么 最简单的方法的核心就是使用它 String HtmlColor System Drawing Color
  • 使用 Core Data 按纬度/经度查找最近的位置

    我有一个 iPhone 应用程序 其中包含一个包含位置列表的核心数据数据库 每个位置都有纬度 经度坐标 如何搜索距我当前位置最近的 10 个地点 我是核心数据新手 所以我的问题实际上是如何进行查找 我知道如何获取当前位置等 我相信我需要使用
  • Python垃圾回收如何使用numpy数组追加和删除?

    我正在尝试调整在计时器上更新的绘图代码 matplotlib 的底层结构 从使用 Python 列表绘制数据到使用 numpy 数组 我希望能够尽可能降低绘图的时间步长 并且由于数据可能会达到数千个点 如果不能的话 我就会开始快速浪费宝贵的