如何将浮点数提升到另一个类的实例?



我试图在python(3.7.4(中使用对偶数的增强代数来实现自动微分,这是实数和对偶部分的实数的扩展(类似于复数(。我现在需要将浮点运算符(如 + - */^(扩展到它们。加法、减法、乘法和除法很容易实现(我以与这里相同的方式完成(,但是,我在使用指数时遇到了问题。

我像这样实现双数类:

class DualNumber:
def __init__(self, real, dual):
self.real = real
self.dual = dual
# definitions of __add__, __sub__, __mul__ etc. ...
def __pow__(self, other):
if isinstance(other, DualNumber):
return DualNumber(self.real ** other.real,
self.dual * other.real * self.real ** (other.real - 1) + self.real ** other.real * other.dual * log(self.real))
else:
return DualNumber(self.real**other,
self.dual * other * self.real**(other - 1))
def auto_diff(f, x):
return f(DualNumber(x, 1.)).dual

这只允许对双数的实例进行指数化。当没有类似于其他运算符的反向变体__rpow__时,如何定义将浮点数提高到 DualNumber 实例的输出?这样我就可以执行这样的操作

a = DualNumber(1,2)
5 ** a

注意:我所说的"浮点数"是指实数的任何表示。

有一个__rpow__.它的文档可以在 Python 数据模型页面上找到。

class X:
def __rpow__(self, other):
return "rpow"
x = X()
print(1**x)  # rpow

相关内容

最新更新