问题描述
我绝对是 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)