在sympy中,我用大量的除法和乘法来表示表达式,但是对于相同的表达式,扩展的打印结果会有所不同,因为sympy有时使用分数1/x**2
,有时使用负指数x**(-2)
。
from sympy import symbols
x = symbols('x')
print(expand((3+x)/x/x))
print(expand((1+x)/x/x))
输出:
1/x + 3/x**2
1/x + x**(-2)
给定一个表达式e,我怎样才能强制sympy将它只转换为负指数呢?(也许反之亦然,如何转换成分数只?)
2条答案
按热度按时间ee7vknir1#
实现这一点的一种方法是通过子类化
StrPrinter
并应用修改。注意事项:
1.改装打印机绝非易事。虽然您的编辑看起来非常简单,但它可能需要比这里发布的简单代码更多的工作!请务必深入研究StrPrinter的源代码,查看
_print_Mul
和_print_Pow
方法以了解其逻辑的复杂性。此外,请查看源代码中的相应测试,以充分理解像这样的简单编辑可能会在其他地方产生问题。1.我只会向你们展示它对你们的两个表情有效。如果它在一般情况下不起作用,那么您需要改进它。另外,我将只展示如何将
1/x**2
打印为x**(-2)
。至于其他的,自己试试吧:)1.下面的代码块可以在Jupyter Notebook上运行,所以你可以只执行
some_expression
而不是print(some_expression)
。如果您要调用print(some_expression)
,由于某种原因,自定义打印机将不会被调用。然后,在不同的单元格上:
bpzcxfmw2#
由于打印机已经知道如何打印指数,如果您修改表达式以使用Symbol而不是Rational来打印指数,那么它将按照您的要求打印。下面是一个技巧,这样打印机就可以正确地打印表达式: