具有 numpy 字段的函数对象在函数调用时不计算值

问题描述

我绝对是 Python 新手,我在以下方式使用 numpy 时遇到了困难。

我的目标是制作一个计算 f(input) - g(input)函数对象 我有以下课程:

class MyFunc:
    def __init__(self,f: callable,g: callable):
        self.f: callable = f
        self.g: callable = g

    def f(self,x: float):
        fresult: float = self.f(x)
        gresult: float = self.g(x)
        result: float = fresult - gresult
        # return self.f(x) - self.g(x)
        return result

我正在将 numpy 函数传递给此类的对象。像这样:

import numpy as np
f1 = np.poly1d([0.1381,0.01081,0.09903,- 0.9153,- 0.4032])
f2 = np.poly1d([-0.6902,- 0.1294,- 0.1718,- 1.07,0.1351])

foo = MyFunc(f1,f2)

问题是当我将输入传递给 foo.f 时,它只计算 f1(input) 而不是 f1(input) - f2(input)

我做错了什么?

我应该如何正确书写?

以下是获得意外输出的示例:

f1 = np.poly1d([0.1381,f2)
value: float = -0.41757
r1 = f1(value) # -0.000319....
r2 = f2(value) # 0.54038....
# I expect fresult = result
result = r1 - r2 # -0.5407....
fresult = foo.f(value) # -0.000319....

解决方法

将您的类定义为:

class MyFunc:
    def __init__(self,f: callable,g: callable):
        self.f: callable = f
        self.g: callable = g

    def fn(self,x: float):
        fresult: float = self.f(x)
        gresult: float = self.g(x)
        result: float = fresult - gresult
        return result

请注意,我将您的 f 函数更改为 fn,以便 把它作为一个单独的对象,因为你已经 f 作为属性之一,在构造函数中设置。

然后将其称为:

fresult = foo.fn(value)

(具有更改的函数名称)。

但也许没有任何自定义类的更简单的方法是计算:

foo = np.polysub(f1,f2)
result = foo(value)

或者更短:

result = np.polysub(f1,f2)(value)