如何在 sympy 表达式中获取系数/ Python

How to get coefficients in sympy expression/ Python

如何在 sympy 表达式中获取系数

b = sympy.Symbol('b')
a = sympy.Symbol('a')
x = sympy.Symbol('x')

y = 2*x**3 + a*x**2 +b*x

结果应该是:

coeff for x**3 =2 coeff for x**2 = a coeff for x = b

得到多项式中项的表达形式出奇地尴尬,但你可以这样做:

In [28]: b = sympy.Symbol('b') 
    ...: a = sympy.Symbol('a') 
    ...: x = sympy.Symbol('x') 
    ...:  
    ...: y = 2*x**3 + a*x**2 +b*x

In [29]: p = Poly(y, x)

In [30]: p
Out[30]: Poly(2*x**3 + a*x**2 + b*x, x, domain='ZZ[a,b]')

In [31]: {x**m[0]:p.coeff_monomial(m) for m in p.monoms()}
Out[31]: 
⎧       2      3   ⎫
⎨x: b, x : a, x : 2⎬
⎩                  ⎭

虽然得到系数很容易

>>> y = 2*x**3 + a*x**2 + b
>>> p = Poly(y, x)
>>> p.coeffs()
[2, a, b]
>>> p.all_coeffs()
[2, a, 0, b]

将它们链接到它们的单项式是 unimplemented/ackward 部分。 @OscarBenjamin 展示了如何使用 Poly 的单项式来做到这一点。您还可以在不将其转换为 Poly 的情况下使用表达式:

>>> dict(i.as_independent(x)[::-1] for i in Add.make_args(y))
{1: b, x**3: 2, x**2: a}

如果 SymPy 在 Poly.coeffs 上包含一个 mapping 关键字,这将允许返回此字典,这将是一个很好的 "battery"。或者,可以给 Expr.as_coefficients_dict 一个可选的 variable 关键字,允许返回独立于 variable.

中任何符号的系数

如果表达式中有未收集的术语,如 a*x + b*x,这个简单的字典理解将失败。发布了一个更强大的小功能 here.