如果我定义下面的等式

import sympy as sp

x00, x01, x02 = sp.symbols('x_{00} x_{01} x_{02}')
x10, x11, x12 = sp.symbols('x_{10} x_{11} x_{12}')
x20, x21, x22 = sp.symbols('x_{20} x_{21} x_{22}')

px0, px1, px2 = sp.symbols('p_{x0} p_{x1} p_{x2}')
py0, py1, py2 = sp.symbols('p_{y0} p_{y1} p_{y2}')

Z = sp.Matrix([ [x00, x01, x02],
                [x10, x11, x12],
                [x20, x21, x22]])
px = sp.Matrix([px0, px1, px2])
py = sp.Matrix([py0, py1, py2])

expr = (py.T * Z * px)[0, 0]

print(expr.coeff(x00))
print(expr.coeff(px0))

我得到了输出

0
p_{y0}*x_{00} + p_{y1}*x_{10} + p_{y2}*x_{20}

为什么sympy返回px0的正确输出,而不是x00的正确输出?

推荐答案

在调用Coef之前,您需要展开:

In [20]: x, y, z = symbols('x, y, z')

In [12]: expr = x*(y + z)

In [13]: expr
Out[13]: x⋅(y + z)

In [14]: expr.coeff(x)
Out[14]: y + z

In [15]: expr.coeff(y) # y does not appear at top level
Out[15]: 0

In [16]: expr.expand() # Now y and z are at top level
Out[16]: x⋅y + x⋅z

In [17]: expr.expand().coeff(x)
Out[17]: y + z

In [18]: expr.expand().coeff(y)
Out[18]: x

In [19]: expr.expand().coeff(z)
Out[19]: x

Python相关问答推荐

在Windows上启动新Python项目的正确步骤顺序

从DataFrame.apply创建DataFrame

添加包含中具有任何值的其他列的计数的列

如何使用SubProcess/Shell从Python脚本中调用具有几个带有html标签的参数的Perl脚本?

Pandas 填充条件是另一列

acme错误-Veritas错误:模块收件箱没有属性linear_util'

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

NP.round解算数据后NP.unique

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

如何在python polars中停止otherate(),当使用when()表达式时?

我们可以为Flask模型中的id字段主键设置默认uuid吗

python中的解释会在后台调用函数吗?

Python列表不会在条件while循环中正确随机化'

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

polars:有效的方法来应用函数过滤列的字符串

如果有2个或3个,则从pandas列中删除空格

Python将一个列值分割成多个列,并保持其余列相同

如何在验证文本列表时使正则表达式无序?

应用指定的规则构建数组

Pythonquests.get(Url)返回Colab中的空内容