python - 如何让 __radd__ 与 numpy 数组一起工作

标签 python arrays math numpy

<分区>

考虑以下 python 代码:

class MyClass:
   def __radd__(self, a):
      print "foo", a
      return a

p = MyClass()

要调用 radd,可以运行以下命令:

>>> print "bar"+p
foo bar
bar

这是预期的行为。 __add__ 运行并失败,因此 __radd__ 接管并处理这种情况。 但是对于 numpy 数组,它的行为有点不同:

>>> v = np.arange(2)
>>> print v+p
foo 0.
foo 1.
[0. 1.]

似乎与上面的示例不同v.__add__ itterativly 遍历v 的组件并对它们执行p.__radd__。换句话说,它已决定返回类型将是 ndarray(只要代码不崩溃)。我知道这是试图变得聪明的 numpy,但有时我希望我的类(class)能够处理算术运算。

是否有可能使用 numpy 数组获得标准的 __radd__ 行为?

最佳答案

当你执行 a+b 时,a 通常会首先尝试定义其含义:b.__radd__ 仅在 a.__add__< 时使用 未实现。所以,在一般情况下,如果你想控制加法,你必须确保你把你的对象放在第一位:b+a

根据 the docs ,不过,也有异常(exception)。如果您将 numpy.ndarray 子类化,并定义一个 __radd__ 方法,它会首先被尝试。因此,如果您的对象基于数组有意义,您可以这样做。

关于python - 如何让 __radd__ 与 numpy 数组一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6127550/

相关文章:

php - sql结果放入php数组

java - 将数组列表发送和检索到 oracle 存储过程

java - checkDeath() 没有被调用

python - 卢卡斯概率素数检验

javascript - 将百分比映射到 0 到 0.5 到 0 的范围

python - 在 Python 中将 pandas 数据帧转换为一维列表时出现额外空格的问题

python - 替换嵌套的 for 循环和列表理解的值分配

python - Python 中可能存在真正的动态和匿名函数吗?

python - "-inf "在python中是什么意思?

python - 优雅的关闭和信号处理