确定 SymPy 表达式的各个项
Determine individual terms of SymPy expression
对于我正在从事的项目,我必须 select 来自任意 SymPy 表达式的特定术语。为此,我使用 .args
如果表达式由多个不同的项组成,它工作正常,但如果只有一个项存在,则 returns 项中的各个系数。请参阅以下示例:
import sympy as sym
x, c0, c1 = sym.symbols('x c0 c1')
f0 = c0*x
f1 = c1*x**2
f2 = c0*x + c1*x**2
print(f0.args) # Output: (c0, x) Desired: (c0*x)
print(f1.args) # Output: (c1, x**2) Desired: (c1*x**2)
print(f2.args) # Output: (c0*x, c1*x**2)
此方法在 f2
returns (c0*x, c1*x**2)
中的效果与我希望的一样。对于 f0
和 f1
然而它 returns 系数 c0, c1
和 x
分开。我将如何实现所需的输出,对于单项表达式,系数和 x
也作为乘法表达式返回?
请注意,理想情况下,我希望此方法适用于任何形式的表达式,对 x
和任意数量的系数具有任意依赖性。
你需要使用poly
来说明你有多项式的事实:
import sympy as sym
from sympy import symbols, Poly
x, c0, c1 = sym.symbols('x c0 c1')
f0 = sym.poly(c0*x)
f1 = sym.poly(c1*x**2)
f2 = c0*x + c1*x**2
print(f0.args) # Output: (c0, x) Desired: (c0*x)
print(f1.args) # Output: (c1, x**2) Desired: (c1*x**2)
print(f2.args) # Output: (c0*x, c1*x**2)
returns
(c0*x, x, c0)
(c1*x**2, x, c1)
(c0*x, c1*x**2)
要获得单字,只需使用
f0.args[0]
这给出了
c0*x
归功于 。由于我不能接受他们的评论作为答案,所以我在这里重新发布它,同时也提供了一个具体的例子。
“您可以使用 Add.make_args(f0)
”
这看起来像这样:
import sympy as sym
x, c0, c1 = sym.symbols('x c0 c1')
f0 = c0*x
f1 = c1*x**2
f2 = c0*x + c1*x**2
print(sym.Add.make_args(f0))
print(sym.Add.make_args(f1))
print(sym.Add.make_args(f2))
哪个 return:
(c0*x,)
(c1*x**2,)
(c0*x, c1*x**2)
对于我正在从事的项目,我必须 select 来自任意 SymPy 表达式的特定术语。为此,我使用 .args
如果表达式由多个不同的项组成,它工作正常,但如果只有一个项存在,则 returns 项中的各个系数。请参阅以下示例:
import sympy as sym
x, c0, c1 = sym.symbols('x c0 c1')
f0 = c0*x
f1 = c1*x**2
f2 = c0*x + c1*x**2
print(f0.args) # Output: (c0, x) Desired: (c0*x)
print(f1.args) # Output: (c1, x**2) Desired: (c1*x**2)
print(f2.args) # Output: (c0*x, c1*x**2)
此方法在 f2
returns (c0*x, c1*x**2)
中的效果与我希望的一样。对于 f0
和 f1
然而它 returns 系数 c0, c1
和 x
分开。我将如何实现所需的输出,对于单项表达式,系数和 x
也作为乘法表达式返回?
请注意,理想情况下,我希望此方法适用于任何形式的表达式,对 x
和任意数量的系数具有任意依赖性。
你需要使用poly
来说明你有多项式的事实:
import sympy as sym
from sympy import symbols, Poly
x, c0, c1 = sym.symbols('x c0 c1')
f0 = sym.poly(c0*x)
f1 = sym.poly(c1*x**2)
f2 = c0*x + c1*x**2
print(f0.args) # Output: (c0, x) Desired: (c0*x)
print(f1.args) # Output: (c1, x**2) Desired: (c1*x**2)
print(f2.args) # Output: (c0*x, c1*x**2)
returns
(c0*x, x, c0)
(c1*x**2, x, c1)
(c0*x, c1*x**2)
要获得单字,只需使用
f0.args[0]
这给出了
c0*x
归功于
“您可以使用 Add.make_args(f0)
”
这看起来像这样:
import sympy as sym
x, c0, c1 = sym.symbols('x c0 c1')
f0 = c0*x
f1 = c1*x**2
f2 = c0*x + c1*x**2
print(sym.Add.make_args(f0))
print(sym.Add.make_args(f1))
print(sym.Add.make_args(f2))
哪个 return:
(c0*x,)
(c1*x**2,)
(c0*x, c1*x**2)