3

我目前正在开发一个可以以矩阵形式放置的微分算子。sympy在这种情况下,args创建Mul对象时列表的顺序对于保证仅在需要的地方执行区分非常重要。

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

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

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

4

1 回答 1

3

为什么 arg 排序对于它的正确性很重要?

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

于 2013-04-26T22:12:34.700 回答