Python 多元多项式的一个系数的最佳分离方法
我有一个多元多项式(在一般情况下是许多变量),它的系数列出了一些我需要读取的数据,但它似乎不是一个很好的方法Python 多元多项式的一个系数的最佳分离方法,python,sympy,symbolic-math,Python,Sympy,Symbolic Math,我有一个多元多项式(在一般情况下是许多变量),它的系数列出了一些我需要读取的数据,但它似乎不是一个很好的方法 collect函数似乎是一个正确的想法,但当您将它与多个变量一起使用时,它实际上并不会给出单个的单项式,而是根据您列出的变量顺序对单项式进行奇怪的分组 有人知道这样做的方法吗?列出了大量处理系数的方法。例如: >>> import sympy >>> x,y,z = sympy.symbols('x,y,z') >>> p = sym
collect
函数似乎是一个正确的想法,但当您将它与多个变量一起使用时,它实际上并不会给出单个的单项式,而是根据您列出的变量顺序对单项式进行奇怪的分组
有人知道这样做的方法吗?列出了大量处理系数的方法。例如:
>>> import sympy
>>> x,y,z = sympy.symbols('x,y,z')
>>> p = sympy.poly((x+2*y-z)**3)
>>> p.coeffs()
[1, 6, -3, 12, -12, 3, 8, -12, 6, -1]
这些是按字典顺序排列的非零系数。要按匹配顺序查看单项式,请使用
>>> p.monoms()
[(3, 0, 0), (2, 1, 0), (2, 0, 1), (1, 2, 0), (1, 1, 1), (1, 0, 2), (0, 3, 0), (0, 2, 1), (0, 1, 2), (0, 0, 3)]
要获得特定单项式的系数,请使用
>>> p.coeff_monomial(x**2*y)
6
下面列出了许多处理系数的方法。例如:
>>> import sympy
>>> x,y,z = sympy.symbols('x,y,z')
>>> p = sympy.poly((x+2*y-z)**3)
>>> p.coeffs()
[1, 6, -3, 12, -12, 3, 8, -12, 6, -1]
这些是按字典顺序排列的非零系数。要按匹配顺序查看单项式,请使用
>>> p.monoms()
[(3, 0, 0), (2, 1, 0), (2, 0, 1), (1, 2, 0), (1, 1, 1), (1, 0, 2), (0, 3, 0), (0, 2, 1), (0, 1, 2), (0, 0, 3)]
要获得特定单项式的系数,请使用
>>> p.coeff_monomial(x**2*y)
6
多项式的单项式按生成器出现的顺序列出(该顺序由用户控制): 查询以获取系数时,可以使用单项式元组或表达式:
>>> Poly(x + 3*y**2, x, y).coeff_monomial(y**2)
3
>>> Poly(x + 3*y**2, x, y).coeff_monomial((0, 2))
3
通过将多边形转换为表达式,然后使用as\u coverties\u dict
方法,可以以单项式表达式形式获得不同单项式的所有系数字典:
>>> p = Poly((x+2*y-z)**3)
>>> p.as_expr().as_coefficients_dict()
defaultdict(<class 'int'>, {
x**3: 1, z**3: -1, y**3: 8, y**2*z: -12, x**2*z: -3,
x*z**2: 3, x**2*y: 6, y*z**2: 6, x*y**2: 12, x*y*z: -12})
这可以转化为defaultdict,对于一个不存在的单项式,它会给出0,并且:
>>> defaultdict(int, _)
defaultdict(<class 'int'>, {(3, 0, 0): 1, (2, 1, 0): 6, (2, 0, 1): -3,
(1, 2, 0): 12, (1, 1, 1): -12, (1, 0, 2): 3, (0, 3, 0): 8, (0, 2, 1): -12,
(0, 1, 2): 6, (0, 0, 3): -1})
>>defaultdict(int,uux)
defaultdict(,{(3,0,0):1,(2,1,0):6,(2,0,1):-3,
(1, 2, 0): 12, (1, 1, 1): -12, (1, 0, 2): 3, (0, 3, 0): 8, (0, 2, 1): -12,
(0, 1, 2): 6, (0, 0, 3): -1})
多项式的单项式按生成器出现的顺序列出(且顺序由用户控制):
查询以获取系数时,可以使用单项式元组或表达式:
>>> Poly(x + 3*y**2, x, y).coeff_monomial(y**2)
3
>>> Poly(x + 3*y**2, x, y).coeff_monomial((0, 2))
3
通过将多边形转换为表达式,然后使用as\u coverties\u dict
方法,可以以单项式表达式形式获得不同单项式的所有系数字典:
>>> p = Poly((x+2*y-z)**3)
>>> p.as_expr().as_coefficients_dict()
defaultdict(<class 'int'>, {
x**3: 1, z**3: -1, y**3: 8, y**2*z: -12, x**2*z: -3,
x*z**2: 3, x**2*y: 6, y*z**2: 6, x*y**2: 12, x*y*z: -12})
这可以转化为defaultdict,对于一个不存在的单项式,它会给出0,并且:
>>> defaultdict(int, _)
defaultdict(<class 'int'>, {(3, 0, 0): 1, (2, 1, 0): 6, (2, 0, 1): -3,
(1, 2, 0): 12, (1, 1, 1): -12, (1, 0, 2): 3, (0, 3, 0): 8, (0, 2, 1): -12,
(0, 1, 2): 6, (0, 0, 3): -1})
>>defaultdict(int,uux)
defaultdict(,{(3,0,0):1,(2,1,0):6,(2,0,1):-3,
(1, 2, 0): 12, (1, 1, 1): -12, (1, 0, 2): 3, (0, 3, 0): 8, (0, 2, 1): -12,
(0, 1, 2): 6, (0, 0, 3): -1})
无需依赖隐式变量顺序,您可以按所需顺序将变量传递给poly
,如poly((x+2*y-z)**3,x,y,z)
。无需依赖隐式变量顺序,您可以按所需顺序将变量传递给poly
,如poly((x+2*y-z)**3,x,y,z)
。