numpy 的就地操作(例如 `+=`)如何工作?

2024-01-17

基本问题是:执行以下操作时,幕后会发生什么:a[i] += b?

鉴于以下情况:

import numpy as np
a = np.arange(4)
i = a > 0
i
= array([False,  True,  True,  True], dtype=bool)

我明白那个:

  • a[i] = x是相同的a.__setitem__(i, x),它直接分配给由i
  • a += x是相同的a.__iadd__(x),就地添加

但当我这样做时会发生什么:

a[i] += x

具体来说:

  1. 这是否与a[i] = a[i] + x? (这不是就地操作)
  2. Does it make a difference in this case if i is:
    • an int索引,或
    • an ndarray, or
    • a slice object

背景

我开始深入研究这个问题的原因是我在处理重复索引时遇到了不直观的行为:

a = np.zeros(4)
x = np.arange(4)
indices = np.zeros(4,dtype=np.int)  # duplicate indices
a[indices] += x
a
= array([ 3.,  0.,  0.,  0.])

关于重复索引的更多有趣的事情这个问题 https://stackoverflow.com/questions/15973827/handling-of-duplicate-indices-in-numpy-assignments/16033516#16033516.


你需要意识到的第一件事是a += x不完全映射到a.__iadd__(x),而是映射到a = a.__iadd__(x)。请注意,文档 http://docs.python.org/3.3/reference/datamodel.html#object.__iadd__特别指出就地运算符返回其结果,并且这不必是self(尽管在实践中,通常是这样)。这意味着a[i] += x简单地映射到:

a.__setitem__(i, a.__getitem__(i).__iadd__(x))

所以,添加技术上就地发生,但仅发生在临时对象上。仍然可能比调用时创建的临时对象少一个__add__, 尽管。

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

numpy 的就地操作(例如 `+=`)如何工作? 的相关文章

  • 替换字符串列表中的 \x00 的最佳方法?

    我有一个来自已解析 PE 文件的值列表 其中包括 x00每个部分末尾的空字节 我希望能够删除 x00字符串中的字节而不删除所有字节 x 文件中的 s 我试过做 replace and re sub 但并没有取得太大成功 使用Python 2
  • 如何使用pycaffe重构caffe网络

    我想要的是 加载网络后 我将分解一些特定的图层并保存新的网络 例如 原网 数据 gt conv1 gt conv2 gt fc1 gt fc2 gt softmax New net 数据 gt conv1 1 gt conv1 2 gt c
  • 如何用 python 和 sympy 解决多元不等式?

    我对使用 python 和 Sympy 还很陌生 并且遇到了使用 sympy 解决多元不等式的问题 假设我的文件中有很多函数 如下所示 cst sqrt x 2 cst exp sqrt cst x 1 4 log log sqrt cst
  • 无法包含外部 pandas 文档 Pycharm v--2018.1.2

    我无法包含外部 pandas 文档Pycharm v 2018 1 2 例如 numpy gt http docs scipy org doc numpy reference generated module name element na
  • Python:当前目录是否自动包含在路径中?

    Python 3 4 通过阅读其他一些 SO 问题 似乎如果moduleName py文件位于当前目录之外 如果要导入它 必须将其添加到路径中sys path insert 0 path to application app folder
  • Python3 查找 2 个列表中有多少个差异才能相等

    假设我们有 2 个列表 always具有相同的长度和always包含字符串 list1 sot sot ts gg gg gg list2 gg gg gg gg gg sot 我们需要找到 其中有多少项list2应该改变 以便它等于lis
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • 使用 genfromtxt 导入 numpy 中缺失值的 csv 数据

    我有一个 csv 文件 看起来像这样 实际文件有更多的列和行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 假设文件的名称是info csv如果我尝试使用导入它 data numpy genfromtxt i
  • Python 中的这种赋值方式叫什么? a = b = 真

    我知道关于元组拆包 http docs python org tutorial datastructures html tuples and sequences但是当一行中有多个等号时 这个赋值被称为什么 阿拉a b True 它总是让我有
  • Python int 太大,无法放入 SQLite

    我收到错误 OverflowError Python int 太大 无法转换为 SQLite INTEGER 来自以下代码块 该文件约25GB 因此必须分部分读取 length 6128765 Works on partitions of
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • Python Flask 是否定义了路由顺序?

    在我看来 我的设置类似于以下内容 app route test def test app route
  • python中的sys.stdin.fileno()是什么

    如果这是非常基本的或之前已经问过的 我很抱歉 我用谷歌搜索但找不到简单且令人满意的解释 我想知道什么sys stdin fileno is 我在代码中看到了它 但不明白它的作用 这是实际的代码块 fileno sys stdin filen
  • WindowsError:[错误 5] 访问被拒绝

    我一直在尝试终止一个进程 但我的所有选项都给出了 Windows 访问被拒绝错误 我通过以下方式打开进程 一个python脚本 test subprocess Popen sys executable testsc py 我想杀死那个进程
  • 使用 Doc2vec 后如何解释 Clusters 结果?

    我正在使用 doc2vec 将关注者的前 100 条推文转换为矢量表示形式 例如 v1 v100 之后 我使用向量表示来进行 K 均值聚类 model Doc2Vec documents t size 100 alpha 035 windo
  • Scrapy 蜘蛛无法工作

    由于到目前为止没有任何效果 我开始了一个新项目 python scrapy ctl py startproject Nu 我完全按照教程操作 创建了文件夹和一个新的蜘蛛 from scrapy contrib spiders import
  • CSV 在列中查找最大值并附加新数据

    大约两个小时前 我问了一个关于从网站读取和写入数据的问题 从那时起 我花了最后两个小时试图找到一种方法来从输出的 A 列读取最大日期值 将该值与刷新的网站数据进行比较 并将任何新数据附加到 csv 文件而不覆盖旧的或创建重复项 目前 100
  • 如何对字符串列表进行排序?

    在 Python 中创建按字母顺序排序的列表的最佳方法是什么 基本回答 mylist b C A mylist sort 这会修改您的原始列表 即就地排序 要获取列表的排序副本而不更改原始列表 请使用sorted http docs pyt
  • 从时间序列生成日期特征

    我有一个数据框 其中包含如下列 Date temp data holiday day 01 01 2000 10000 0 1 02 01 2000 0 1 2 03 01 2000 2000 0 3 30 01 2000 200 0 30
  • 如何在SqlAlchemy中执行“左外连接”

    我需要执行这个查询 select field11 field12 from Table 1 t1 left outer join Table 2 t2 ON t2 tbl1 id t1 tbl1 id where t2 tbl2 id is

随机推荐

  • 使用 Cocoa 的 Accessibility API 获取应用程序的 Dock 图标的位置

    如何使用 Accessibility API 获取应用程序的 Dock 图标的位置 找到了 使用这个论坛帖子 http cocoadev com forums discussion 1431 getting dock icon positi
  • Elasticsearch.Net 和超时

    我有一个 4 节点的 Elasticsearch 集群 我有一个 net 控制台应用程序 旨在用来自 sql 的数据填充集群 只要我将添加 或删除 记录的速度保持在相当低的水平 一切都会正常 如果我最终增加线程数 我将从控制台应用程序中看到
  • 无法在 AngularJS 中从控制器设置日期选择器日期

    我正在尝试按按钮创建一个 AngularJS 日期选择器 我在用this http angular ui github io bootstrap datepickerbootstrap ui 控件 该控件可以工作 单击按钮就会弹出 我可以选
  • 通过 Go (go 1.18) 泛型创建类型化值的新对象

    我正在 go 1 18 的 beta 版本中使用泛型 下面示例中的创建函数应该创建新的实例 T 所以 Apple 我尝试使用反射包来实现这一点 但没有运气 你能告诉我如何更改功能吗Create从下面的示例中 它创建了实例T而不是返回 nil
  • 将所有代码从 master 转移到新分支并从 master 中删除代码

    我的代码位于项目的主分支中 我希望代码位于单独的分支中 而不是在主分支中 我可以创建一个新的分支master 但是在创建分支之后 是否可以从主分支中删除所有代码 这样如果我稍后重新调整或将我的新分支合并到主分支中 就不会导致任何问题 谢谢
  • NodeJS javascript 中的异步响应循环

    我有一个使用 Express 4 的 NodeJS API 我使用 Sequelize 连接到数据库 并多次调用一个查询 我想将结果累积到一个数组中 问题是res send不等待循环结束来发送答案 my code router post p
  • 具有 SSE4.1 内在函数的双线性滤波器

    我现在正在尝试找出一种一次仅针对一个过滤样本的相当快速的双线性过滤函数 作为习惯使用内在函数的练习 最高可达 SSE41 就可以了 到目前为止我有以下内容 inline m128i DivideBy255 8xUint16 const m1
  • 查找 XML 节点集的最低公共祖先

    我有一个使用 XSLT 中的 xsl key 结构构造的节点集 我想找到该节点集中所有节点的最低共同祖先 LCA 有什么想法吗 我了解 Kaysian intersects 和 XPath 的 intersect 函数 但这些似乎是为了找到
  • Celery + SQS 两次接收相同的任务,同时具有相同的任务 ID

    在 Flask 应用程序中使用带有 SQS 的 celery but celery 同时接收两次具有相同任务 ID 的相同任务 像这样运行工人 celery worker A app jobs run l info pidfile var
  • 使用 TKAgg 的 Matplotlib、Pylab:在 win32 上使用 plt.ion() 时遇到 PyEval_RestoreThread: NULL tstate

    EDIT 呸 终于找到了关于Runtime Error的讨论 虽然重点是使用PythonWin 而我当时还没有安装 安装 PythonWin 并设置 GTK 后 按照先前的问题 https stackoverflow com questio
  • Git:将提交合并到不同的分支中

    所以我有3个分支 develop 我的持续开发分支 version 1 一个发布分支 version 2 一个发布分支 我必须做一个修补程序version 2要重新发布该版本 需要在 2 个文件中进行 2 行更改 非常小 我想将该修复应用于
  • 文件类型 - 获取原始扩展名

    如果文件已重命名 如何查找文件扩展名 有没有可用的工具 示例 我有一个文件 1 doc 我希望大家知道这是一个我刚刚重命名为 1 txt 的Word文档 但该文件原本是Word文档 如何获得原始文件扩展名 当然可以 这是适合您的 C 代码
  • 如何隐藏 Chrome 中 HTML5
    元素上默认显示的箭头?

    现在还为时过早 但我也知道你们已经掌握了一切 我想使用HTML5 详细信息元素 http www w3 org TR html5 interactive elements html the details element
  • XSS 酷刑测试 - 它存在吗?

    我正在寻找编写一个 html 清理程序 显然为了测试 证明它可以正常工作 我需要一组 XSS 示例来对抗它 看看它的性能如何 这是一个 编码恐怖 中的好例子 http www codinghorror com blog archives 0
  • 带有手动触发器和选择器选项的 Bootstrap 工具提示

    我有一个动态表 加载了ajax 我想当我将鼠标悬停在某个对象上时显示工具提示row 但我希望工具提示出现在某个特定的位置上cell 与类 name 而不是在整行上方 另外 使用 title 函数 我需要能够获取最接近的行 ID 并返回自定义
  • 查找打印机是否在线并准备好打印

    以下 4 个问题没有帮助 因此这不是重复的 ONE https stackoverflow com questions 16516155 check if printer is shutdown or not using printerst
  • SWI Prolog - 简化表达式

    我想编写一个过程 simple E E1 它能够简化表达式 我只有一个操作 以及符号和数字操作数 此过程的示例 simplify a 1 b 5 E gt E a b 6 simplify 1 b 9 a 5 c E gt E b a c
  • InteractivePopGestureRecognizer 损坏根视图控制器上的导航堆栈

    In my UINavigationController我添加了自定义后退按钮 其副作用是无法再从左向右滑动以弹出视图控制器并导航回来 所以我实施了interactivePopGestureRecognizer按照我的习惯UINavigat
  • 使用 ON DELETE CASCADE 定义表时出现语法错误

    我正在尝试使用ON DELETE CASCADE在 MS Access 2007 的 FK 约束中 但我在表定义上遇到错误 SQL 错误 CONSTRAINT 子句中存在语法错误 这是创建表的代码 CREATE TABLE Area Id
  • numpy 的就地操作(例如 `+=`)如何工作?

    基本问题是 执行以下操作时 幕后会发生什么 a i b 鉴于以下情况 import numpy as np a np arange 4 i a gt 0 i array False True True True dtype bool 我明白