如何将float提升到另一个类的实例?

2024-09-29 19:25:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python(3.7.4)实现automatic differentiation,使用dual numbers的增广代数,实数的一个实数和对偶部分的扩展(类似于复数)。我现在需要扩展浮点运算符(比如+-*/^)。加法、减法、乘法和除法很容易实现(我的实现方式与here相同),但是,我在处理指数运算时遇到了问题

我实现了如下的DualNumber类:

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

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

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

注:我所说的“浮点数”是指任何实数的表示


Tags: 实例selfreturndefrealautomaticother代数

热门问题