使用 __add__ 自定义类以添加 NumPy 数组

2023-11-25

我有一个自定义类实现 __add__ 和 __radd__ 作为

import numpy

class Foo(object):

    def __init__(self, val):
        self.val = val

    def __add__(self, other):
        print('__add__')
        print('type self = %s' % type(self))
        print('type other = %s' % type(other))
        return self.val + other

    def __radd__(self, other):
        print('__radd__')
        print('type self = %s' % type(self))
        print('type other = %s' % type(other))
        return other + self.val

我首先测试 __add__

r1 = Foo(numpy.arange(3)) + numpy.arange(3,6)
print('type results = %s' % type(r1))
print('result = {}'.format(r1))

它会带来预期的结果

>>> __add__
>>> type self = <class '__main__.Foo'>
>>> type other = <type 'numpy.ndarray'>
>>> type results = <type 'numpy.ndarray'>
>>> result = [3  5  7]

但是,测试 __radd__

r2 = numpy.arange(3) + Foo(numpy.arange(3,6))
print('type results = %s' % type(r2))
print('result = {}'.format(r2))

I get

>>> __radd__
>>> type self = <class '__main__.Foo'>
>>> type other = <type 'int'>
>>> __radd__
>>> type self = <class '__main__.Foo'>
>>> type other = <type 'int'>
>>> __radd__
>>> type self = <class '__main__.Foo'>
>>> type other = <type 'int'>
>>> type results = <type 'numpy.ndarray'>
>>> result = [array([3, 4, 5]) array([4, 5, 6]) array([5, 6, 7])]

这对我来说没有任何意义。 NumPy 是否会为任意对象重载 __add__ ,然后该对象的优先级高于我的 __radd__ ?如果是的话,他们为什么要这么做?另外,我怎样才能避免这种情况,我真的希望能够在左侧添加带有 NumPy 数组的自定义类。谢谢。


这被评论隐藏了,但应该是答案。

默认情况下,Numpy 操作在每个元素的基础上进行,获取任意对象,然后尝试按元素执行操作(根据广播规则)。

例如,这意味着给定

class N:
    def __init__(self, x):
        self.x = x

    def __add__(self, other):
        return self.x + other

    def __radd__(self, other):
        return other + self.x

由于Python的运算符解析

N(3) + np.array([1, 2, 3])

将到达上述__add__ with N(3)整个数组为other一次,然后执行常规的 Numpy 加法。

另一方面

np.array([1, 2, 3]) + N(3)

将成功进入 Numpy 的 ufunc(在本例中为运算符),因为它们将任意对象作为“其他”,然后尝试连续执行:

1 + N(3)
2 + N(3)
3 + N(3)

这意味着__add__以上将被调用 3 次而不是一次,每个元素调用一次,显着减慢操作速度。要禁用此行为,并进行Numpy提出一个NotImplementedError当采取N对象从而允许 RHS 过载radd要接管,请将以下内容添加到类的主体中:

class N:
    ...
    __numpy_ufunc__ = None # Numpy up to 13.0
    __array_ufunc__ = None # Numpy 13.0 and above

如果向后兼容性不是问题,则只需要第二个。

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

使用 __add__ 自定义类以添加 NumPy 数组 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate

随机推荐

  • 无法在 Android NDK 中包含像矢量这样的 C++ 标头

    当我尝试在我的 Android NDK 项目中包含任何 C 类 例如向量 时 使用最新的 NDK r5b 我收到如下错误 Compile thumb test libstl lt test libstl cpp Users nitrex88
  • CSS 过渡忽略宽度

    我有一个显示为块的标签 页面加载时 其宽度会增加 css动画片从零到包含 div 的某个百分比 小提琴包含一个 MWE 但此 div 中有多个链接 每个链接都有不同的宽度 悬停时 我希望它使用 CSS 改变颜色 改变背景颜色 并扩展到 di
  • 去替换所有字符串

    我阅读了示例代码golang org 网站 本质上 代码如下所示 re regexp MustCompile a x b fmt Println re ReplaceAllString ab axxb T fmt Println re Re
  • CSS:在 CSS 中设置背景图像

    在 CSS 中设置背景图像时 正确的语法是什么 在Visual Studio中 自从出现以来 后台似乎没有任何问题 但在IE或FF等浏览器中 背景不会出现 我在这里错过了什么吗 我使用的语法如下 我认为是正确的 headerArea hei
  • Xerces-C:从 v2.x 迁移到 v3.x?

    我想将一个项目 我不太熟悉的遗留代码 从 Xerces C v2 x 迁移到 v3 x 事实证明 Xerces C v3 删除了 DOMBuilder 类 这迁移档案告诉我这个 作为最终 DOM Level 3 规范一致性工作的一部分 许多
  • Django post_save() 信号实现

    我有一个关于 django 的问题 我这里有ManyToMany模型 class Product models Model name models CharField max length 255 price models DecimalF
  • 如何将数据类型 CLOB 更改为 VARCHAR2(sql)

    表 客户 ID NAME DATATYPE NUMBER VARCHAR2 100 CLOB 我想改变DATA专栏来自CLOB到 VARCHAR2 1000 我已经尝试过ALTER TABLE customers MODIFY DATA V
  • 如何使用键值删除字典数组中的对象

    我有一个字典数组 如下所示 photo id 255025344921316 photo url https scontent xx fbcdn net v t1 0 0 p320x320 16143181 255025344921316
  • React 如何使用 TypeScript 在 Textfield Material-UI 中使用图标

    我使用 TypeScript Material UI 和 Formik 设计了一个带有验证的表单 我想要一个材质 UI 图标出现在我的文本字段区域中 这是我的代码 import React from react import Formik
  • 惰性变量定义后括号做什么?

    我正在分析一些第三方代码 有一个看起来像这样的 惰性 var 语句 我想了解 计算属性 大括号后面的括号在做什么 lazy var defaults NSUserDefaults return standardUserDefaults re
  • asp.net mvc 和 css:使菜单选项卡在选择时保持突出显示

    有一个更好的方法吗 我有一个 HTML 帮助器扩展方法 它检查当前选项卡菜单是否是选定的菜单 然后选择 selected css 类 我将 html IsSelected 链接放在每个 li 中 li class 其中 a 是选项卡名称 b
  • 批量 C# 数据表到 postgresql 表

    我有一个包含数千条记录的数据表 我有一个与数据表具有相同字段的 postgres 表 我想每天截断该表并再次填充数据表的数据 我见过sql批量复制 但它在postgres上不可用 那么 哪一种方法是最有效的呢 每条记录一次插入 多次插入 插
  • 结构类型嵌入字段访问

    我在尝试学习golang目前我正在尝试理解指针 我定义了三种结构类型 type Engine struct power int type Tires struct number int type Cars struct Engine Tir
  • stdout 在 docker 容器中缓冲

    我不完全确定这里发生了什么 但当我在容器中运行代码时 stdout 似乎正在被缓冲 但如果我在主机或 OSX 上运行它 则不会 https github com myles mcdonnell procwrap blob master pr
  • 如何在 clojure 中创建可执行文件?

    我一直在使用 Clojure Box 在 REPL 环境中学习 clojure 如何制作可执行文件 jar 我想知道这样的事情是否可能 在记事本上编写 clojure 代码并将其命名为project clj 编译项目 clj 获取可执行文件
  • 如何创建 Gmail API 消息

    我想使用 Google 的 Gmail API 发送消息 我已成功通过身份验证 并尝试使用 GmailService 发送消息 我想用这个 myService Users Messages Send myMessage me Execute
  • iPhone:如何获取当前毫秒数?

    获取当前系统时间毫秒的最佳方法是什么 如果您正在考虑将其用于相对计时 例如游戏或动画 我宁愿使用CA当前媒体时间 double CurrentTime CACurrentMediaTime 这是推荐的方式 NSDate从网络同步时钟获取 并
  • Angular 5 延迟加载错误:找不到模块

    我想使用延迟加载 但我不明白为什么它不起作用 它给了我错误 找不到模块 这是我的环境 角度 5 2 1 NET核心2 网页包 3 10 0 角度路由器加载器 0 8 2 角度 cli 1 6 5我在 loadChildren 中尝试了不同的
  • 如何从 Pdf、Word 和 Excel 文档中提取文本? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要一个 NET 库 以便使用它从 PDF Excel 和 Word 文件中提取文本数据 最好是免费工具 你会推荐一些吗 非常感谢 作为花了很多天
  • 使用 __add__ 自定义类以添加 NumPy 数组

    我有一个自定义类实现 add 和 radd 作为 import numpy class Foo object def init self val self val val def add self other print add print