Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Symphy打印上强制执行自定义订购_Python_Sympy - Fatal编程技术网

Python 在Symphy打印上强制执行自定义订购

Python 在Symphy打印上强制执行自定义订购,python,sympy,Python,Sympy,symphy做了一件很棒的工作,记录了我对符号表达式所做的所有操作。但在打印乳胶输出结果的那一刻,我想强制执行该术语的某种排序。这只是约定,不幸的是,约定在符号名称上不是按字母顺序排列的(正如合理的sympy所做的那样) 我的问题是SymPy将表达式按顺序表示为 U + U/(-3*t_\perp + z) + d + t_\perp**2 + z 但这种排序在我的领域里不是惯例。对于我们来说,z必须是最左边的表达式,然后是tp,然后是U,即使它是大写的,d是最不相关的,并且放在右边。所有这些

symphy
做了一件很棒的工作,记录了我对符号表达式所做的所有操作。但在打印乳胶输出结果的那一刻,我想强制执行该术语的某种排序。这只是约定,不幸的是,约定在符号名称上不是按字母顺序排列的(正如合理的
sympy
所做的那样)

我的问题是
SymPy
将表达式按顺序表示为

U + U/(-3*t_\perp + z) + d + t_\perp**2 + z
但这种排序在我的领域里不是惯例。对于我们来说,
z
必须是最左边的表达式,然后是
tp
,然后是
U
,即使它是大写的,
d
是最不相关的,并且放在右边。所有这些变量都有一个特定的含义,这就是为什么我们按这样的顺序编写它们,代码变量中的原因也是这样命名的


我不想将
z
重命名为
a
,并按照中的建议,然后在打印时将
a
转换为
z
。在这里有一个提示,我可以写一个排序函数,但我找不到有关它的文档

如果您可以按您想要的顺序放置术语,则将Latex打印机的
顺序
标记设置为“无”将按该顺序打印

>>> import sympy as sp
>>> sp.init_printing()
>>> U,tp, z, d = sp.symbols('U t_\perp z d')
>>> eq=z+tp**2+U+U/(z-3*tp)+d
在这里,我们将它们按顺序排列(知道
tp
的功能是2),并使用
evaluate=False
将其重新构建为Add,以保持顺序不变

>>> p = Add(*[eq.coeff(i)*i for i in (z, U, tp**2, d)],evaluate=False)
现在,我们使用打印机实例以
order='none'
打印该表达式:

>>> from sympy.printing.latex import LatexPrinter
>>> s=LatexPrinter(dict(order='none'))
>>> s._print_Add(p)
z + U \left(1 + \frac{1}{z - 3 t_\perp}\right) + t_\perp^{2} + d
>>> from sympy.printing.latex import LatexPrinter
>>> s=LatexPrinter(dict(order='none'))
>>> s._print_Add(p)
z + U \left(1 + \frac{1}{z - 3 t_\perp}\right) + t_\perp^{2} + d