我正在構建一個類來構建某種類型的近似函數(數學函數)。這個近似函數將是給定數量的基函數的線性組合,我將其存儲在一個列表中,並且它將返回一個標量。該類的方法需要在每次迭代中更新我的逼近函數,方法是將每個基函數與標量(針對不同基函數的不同標量)相乘,並形成總和。換句話說,我需要通過形成基函數的線性組合並將我的逼近函數設置爲這個未經評估的函數之和來更新我的逼近函數。未評估函數的線性組合
這個類的默認基礎是一個多項式基礎,我用NumPy的poly1d class實現。我形成線性組合的方法是目前
sum(self.basis[i]*self.coeffs[i] for i in range(self.dim))
其中(顯然)self.basis是基函數的列表中,self.coeffs是標量的與所述基函數乘以列表,self.dim是基函數的數量。該方法適用於poly1d類,但不是,例如,如果我使用的基礎,如:
basis1 = [lambda x: float(x), lambda y: float(y)**2]
或
def x(y):
return y
def x2(y):
return y**2
basis2 = [x, x2]
Basis1給我的錯誤
TypeError: only length-1 arrays can be converted to Python scalars
Basis2給我錯誤
TypeError: unsupported operand type(s) for *: 'function' and 'numpy.float64'
Likew ISE採用
sum(itertools.imap(operator.mul, self.basis, self.lambdas))
作品爲基礎poly1d,而不是上面的其他基地,並給出了同樣的錯誤消息。
所以我的問題是:如何在Python中使用或不使用NumPy形成未評估函數的線性組合?