避免对Python模块Sympy中的参数进行排序



我目前正在开发sympy的微分算子,它可以被放置在物质形式中。在这种情况下,当创建Mul对象时,args列表的顺序对于保证只在需要的地方执行微分是非常重要的。

问题是,当完成以下操作时:

input = (t,z,x)
Mul(*input).args

返回(t, x, z),因为在args中发生了一些重排。如何避免args被排序?

为什么参数排序对它的正确性很重要?

防止这种情况的唯一方法是将你的符号设置为不可交换的(x = Symbol('x', commutative=False))。SymPy对象通过比较args来进行比较,因此要使x*y*z == y*x*z起作用,参数必须按规范排序。在没有显式排序(主要是出于性能原因)的情况下,已经有一些尝试让它工作,但请注意,即使我们这样做了,也不能保证参数的顺序,特别是如果您对表达式执行任何类型的操作。函数在SymPy中重建表达式是很常见的,这通常会使用与原始表达式无关的其他顺序。

相关内容

  • 没有找到相关文章

最新更新