Я строю класс для построения определенного типа аппроксимирующей функции (математической функции). Эта аппроксимирующая функция будет линейной комбинацией заданного числа базисных функций, которые я храню в списке, и она возвращает скаляр. Метод класса должен обновлять мою аппроксимирующую функцию в каждой итерации, умножая каждую базисную функцию на скаляр (разные скаляры для разных базисных функций) и формируя сумму. Другими словами, мне нужно обновить мою аппроксимирующую функцию, сформировав линейную комбинацию базисных функций и установив мою аппроксимирующую функцию на эту неоцененную сумму функций.
Основой по умолчанию для этого класса является полиномиальная основа, которую я реализовал с помощью poly1d класса NumPy . Способ, которым я формирую линейную комбинацию, в настоящее время
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'
Аналогично, используя
sum(itertools.imap(operator.mul, self.basis, self.lambdas))
работает для базы poly1d, но не для других баз выше, и выдает те же сообщения об ошибках.
Итак, мой вопрос: как мне сформировать линейную комбинацию неоцененных функций в Python (используя или не используя NumPy)?