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

发布于 2021-01-29 15:05:36

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

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

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

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

关注者
0
被浏览
76
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看