一尘不染

避免在Python模块Sympy中对args进行排序

python

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

问题是,完成以下操作后:

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

(t, x, z)之所以返回,是因为进行了一些重排args。如何避免args被排序?


阅读 245

收藏
2021-01-20

共1个答案

一尘不染

为什么arg的顺序对正确来说很重要?

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

2021-01-20