1

我构造了一个 sympy 表达式,并使用 lambdify 转换为 numpy 函数,如下所示:

import sympy
from sympy.parsing.sympy_parser import parse_expr

x0,x1 = sympy.symbols('x0 x1')
a,b,c = sympy.symbols('a b c')
func=parse_expr('a*x0 + b*x1 + c*x0*x1')
p = [x0,x1,a,b,c]

npFunc = sympy.lambdify(p,func,'numpy')

但是当我使用 scipy 的curve_fit 为(a,b,c)的npFunc 拟合两个自变量x0 和x1 时,它失败了。我不知道如何使用 lambdify 使 npFunc 像这样工作(解包):

def npFunc(X, a, b, c):
    x0,x1 = X
    return a*x0 + b*x1 + c*x0*x1

我该怎么做?

4

1 回答 1

0

您的函数的文档(使用ipython ?快捷方式)

In [22]: npFunc?
Signature: npFunc(x0, x1, a, b, c)
Docstring:
Created with lambdify. Signature:

func(x0, x1, a, b, c)

Expression:

a*x0 + b*x1 + c*x0*x1

Source code:

def _lambdifygenerated(x0, x1, a, b, c):
    return (a*x0 + b*x1 + c*x0*x1)

使用建议的替代方案:

In [23]: p = [[x0, x1], a, b, c]

In [24]: npFunc = lambdify(p,func,'numpy')

In [25]: npFunc?
Signature: npFunc(_Dummy_22, a, b, c)
Docstring:
Created with lambdify. Signature:

func(arg_0, a, b, c)

Expression:

a*x0 + b*x1 + c*x0*x1

Source code:

def _lambdifygenerated(_Dummy_22, a, b, c):
    [x0, x1] = _Dummy_22
    return (a*x0 + b*x1 + c*x0*x1)
于 2021-02-19T00:08:14.100 回答