ipython %timeit“赋值前引用的局部变量‘a’”

2023-11-26

我正在尝试运行以下代码,但我得到了local variable 'a' referenced before assignment.

a = [x for x in range(10)]
b = [x for x in range(10)]
%timeit a+=b

该语句无需%timeit magic.

我有什么遗漏的吗?

谢谢。


您期望它做什么?

在时间之外它会:

In [188]: a += b
In [189]: a
Out[189]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

我尝试初始化x,并得到一个接近无限循环,最终以内存错误结束

In [192]: %%timeit x=a
     ...: x += b

In [194]: len(a)
Out[194]: 529076630

换句话说,每个 timeit 循环都连接另一个列表b价值观x(并且通过扩展a),结果是很长的循环。我怀疑一个人x+=b速度很快,导致timeit选择循环多次。

让我们创建一个a新鲜的每个循环:

In [196]: %%timeit
     ...: a = [x for x in range(10)]
     ...: a += b
     ...: 
1.91 µs ± 4.82 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

这也会产生内存错误:

In [197]: %%timeit a = [x for x in range(10)]
     ...: a += b

如果我控制循环次数:

In [202]: %%timeit -n 100 a = [x for x in range(10)]
     ...: a += b
     ...: 
     ...: 
208 ns ± 11 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)

With ns有时我可以明白为什么默认循环如此之大。

我还没有尝试过计时a+=...之前(甚至不包括 numpy 数组),但显然它需要某种本地初始化a,无论是在循环内还是在初始化块中。但请务必记住,定时操作可能会执行多次(-r 和 -n 参数或默认值)。因此,任何就地操作都可能导致全局值发生一些变化。在这种情况下timeit可能是通过预期某种“局部”变量来试图保护我们免受这种意外增长的影响。


让我们尝试一下a+b,但有一个任务:

In [215]: c=np.zeros(10)
In [216]: a
Out[216]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
In [217]: b
Out[217]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [218]: %timeit c = a+b
5.33 µs ± 105 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [219]: c
Out[219]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

请注意,全球c没有改变。该任务分配给临时本地人c- 即使同名的全局可用。

作为一般规则,在定时循环内执行的计算不应泄漏到循环之外。你必须像我在内存错误循环中所做的那样明确一些,或者在这里

In [222]: %%timeit x = c
     ...: x += b
     ...: 
9.04 µs ± 238 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [223]: c
Out[223]: 
array([       0.,   811111.,  1622222.,  2433333.,  3244444.,  4055555.,
        4866666.,  5677777.,  6488888.,  7299999.])

or here:

In [224]: c=np.zeros(10)
In [225]: %%timeit x = c
     ...: x[:] = a+b

7.84 µs ± 199 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [226]: c
Out[226]: array([  1.,   3.,   5.,   7.,   9.,  11.,  13.,  15.,  17.,  19.])

两者都使用对已链接到可变全局变量的局部变量的就地赋值。

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

ipython %timeit“赋值前引用的局部变量‘a’” 的相关文章

  • Python Popen 与 psexec 挂起 - 不良结果

    我对 subprocess Popen 和我认为是管道的问题有疑问 我有以下代码块 从 cli 运行时 100 都不会出现问题 p subprocess Popen psexec serverName get cmd c ver echo
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • 如何迭代按值排序的 Python 字典?

    我有一本字典 比如 a 6 b 1 c 2 我想迭代一下by value 不是通过键 换句话说 b 1 c 2 a 6 最直接的方法是什么 sorted dictionary items key lambda x x 1 对于那些讨厌 la
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • 如何计算numpy数组中元素的频率?

    我有一个 3 D numpy 数组 其中包含重复的元素 counterTraj shape 13530 1 1 例如 counterTraj 包含这样的元素 我只显示了几个元素 array 136 129 130 103 102 101 我
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • 如何设置 Celery 来调用自定义工作器初始化?

    我对 Celery 很陌生 我一直在尝试设置一个具有 2 个独立队列的项目 一个用于计算 另一个用于执行 到目前为止 一切都很好 我的问题是执行队列中的工作人员需要实例化一个具有唯一 object id 的类 每个工作人员一个 id 我想知
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • 使用 Firefox 绕过弹出窗口下载文件:Selenium Python

    我正在使用 selenium 和 python 来从中下载某些文件web page http www oceanenergyireland com testfacility corkharbour observations 我之前一直使用设
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户

随机推荐

  • 在 WAMP 上安装 IMAGEMAGICK 的分步说明?

    似乎没有任何简明的教程 演练在 WAMP 上安装 ImageMagick 以与 PHP 一起使用 我已经尝试了数十种二进制版本与不同 php 扩展 dll 文件的组合 我可以从命令行让 imagemagick 正常工作 并且可以让它在 WA
  • 缺少 Google 日历结束时间

    这是我的谷歌日历请求 在响应中 错误代码是 缺少结束时间 我正在尝试使其动态化 因此我最终将删除硬编码的开始和结束日期时间 var object end dateTime 2014 07 28T23 00 00 end timeZone t
  • 根据选项组和选项计算产品变体

    我正在编写一个电子商务网站 需要一种好方法来计算产品变化 网站有产品 产品可以有很多选项组 选项组可以有很多选项 因此 T 恤产品有 3 个选项组和选项 Size 小的 中等的 大的 Color 红色的 蓝色的 黄色的 黑色的 Materi
  • python 修改函数中列表的切片

    考虑下面的代码 def func1 a a x 2 for x in a a range 10 print a prints 0 1 2 3 4 5 6 7 8 9 func1 a 5 print a also prints 0 1 2 3
  • 如何在SVN中找到两个分支的共同祖先?

    想象一下 您有一棵巨大的 SVN 树 树枝遍布各处 有树干 有树枝 这些树枝有树枝 等等 那么 给定树中的两个树枝 如何找到共同的祖先 我知道你可以简单地获取完整的日志并进行比较 但是如果你的主干有 75 000 个修订 并且大多数时候你确
  • 在 SpriteKit 中移动相机

    UPDATE已添加更新的代码 其工作原理符合我的预期 请参阅下面更新的代码中的 didSimulatePhysics 方法 就我而言 我只关心在 x 轴上向左或向右移动字符 其中 x 轴上的 0 是绝对左侧 x 轴上的右侧是可配置值 苹果的
  • Set-MsmqQueueACL - 允许 - 无法按照文档使用列表?

    我正在尝试使用 Powershell v5 1 Win2k16 在 Msmq 队列上设置 ACL 但即使我遵循文档 我仍然收到错误 Get MsmqQueue Name s009 ClientsServiceBus QueueType Pr
  • 如何在服务器端获取 HTTP POST 请求正文作为 Java 字符串?

    HttpExchange 对象的 getRequestBody 方法返回一个 InputStream 正确解读 正文 还有很多工作要做 它是一个 Java 库 对象 方法 向前迈出一步并将主体 在服务器端 作为现成的 Java 字符串返回
  • 如何在没有 glDrawPixels 的情况下将缓冲区对象渲染/绘制到帧缓冲区

    根据 opengl 规范 4 0 glDrawPixels 已被弃用 对于 cuda 互操作性 似乎最好使用 opengl 缓冲区对象 替代方案可以是纹理或表面 但它们存在缓存 并发问题 因此无法用于我的 cuda 内核 我只是想创建一个
  • 为什么我们使用finally块? [复制]

    这个问题在这里已经有答案了 据我所知 以下两个代码片段都具有相同的目的 为什么有finally完全阻塞吗 Code A try Some code catch Exception handling code finally Cleanup
  • 什么是锯齿状数组?

    什么是锯齿状数组 在 C 中 任何例子以及何时应该使用它 交错数组是数组的数组 string arrays new string 5 这是五个不同字符串数组的集合 每个数组的长度都可以不同 它们也可以是相同的长度 但重点是没有保证他们就是
  • ScrollViewer 上 VerticalOffset 属性的双向绑定?

    我在 Silverlight 3 0 中有一个视图和一个视图模型 该视图包含一个标准的 ScrollViewer 其中包含动态内容 根据 ScrollViewer 中的内容 用户可能已向下滚动内容一半 然后执行导致 ScrollViewer
  • 使用 CSS @font-face 时,浏览器按什么顺序使用不同类型?

    使用时 font faceCSS 中是否记录了每种主要浏览器中适用的字体类型 以及如果缺少一种或多种字体类型 它们对不同字体类型的优先级 我尝试用谷歌搜索答案 但失败了 font face font family myfont src ur
  • 将 int 转换为 BCD 字节数组

    我想使用 BCD 将 int 转换为 byte 2 数组 所讨论的 int 将来自表示年份的 DateTime 并且必须转换为两个字节 是否有任何预制函数可以执行此操作 或者您能给我一个简单的方法来执行此操作吗 example int ye
  • AlertDialog 按钮的图像

    是否可以添加drawables到positive negative and neutralAlertDialog 的按钮 如果是 那么如何 Since onPrepareDialog已弃用 您可以使用onShowListener反而 此外
  • ForbiddenError:无效的 csrf 令牌,express js

    我试图让 csurf 工作 但似乎偶然发现了一些东西 到目前为止的代码如下所示 索引 ejs
  • T-SQL 输出子句:如何访问旧的身份 ID

    我有一个 T SQL 语句 它基本上执行插入并将一些插入的值输出到表变量以供以后处理 有没有办法让我将所选记录的旧身份 ID 存储到我的表变量中 如果我使用下面的代码 我会得到 无法绑定多部分标识符 a ID 错误 DECLARE act
  • 如何使用 ACTION_VIDEO_CAPTURE 操作对相机的意图将文件的输出设置为 mp4?

    当我使用本机应用程序相机拍摄视频时 输出文件的扩展名为 3gp 我需要使用 ACTION VIDEO CAPTURE 意图操作来意图相机 这将生成一个具有 mp4 文件扩展名的文件 我该怎么做 您可以继续尝试 dis 代码 intent n
  • Swagger PHP - 如何定义嵌套属性?

    我正在使用 Swagger PHP 大多数定义都很容易定义 但我遇到了一个特定数据块的问题 该数据块不属于单独的类 而是属于关联数组 我希望显示的 json 响应 针对此问题进行了简化 id 1 status published gps l
  • ipython %timeit“赋值前引用的局部变量‘a’”

    我正在尝试运行以下代码 但我得到了local variable a referenced before assignment a x for x in range 10 b x for x in range 10 timeit a b 该语