如何通过sympy在ipython笔记本上打印漂亮?

时间:2014-01-07 19:20:19

标签: python jupyter-notebook jupyter sympy pretty-print

我试过pprintprint,前者只打印Unicode版本,而后者不做漂亮的打印。

from sympy import symbols, Function
import sympy.functions as sym
from sympy import init_printing
init_printing(use_latex=True)
from sympy import pprint
from sympy import Symbol

x = Symbol('x')

# If a cell contains only the following, it will render perfectly.
(pi + x)**2

# However I would like to control what to print in a function, 
# so that multiple expressions can be printed from a single notebook cell.
pprint((pi + x)**2)

4 个答案:

答案 0 :(得分:54)

你需要使用display:

from IPython.display import display

display(yourobject)

它将选择合适的表示形式(text / LaTex / png ...),默认导入最近版本的IPython(6.0+)显示,我们仍然建议明确导入它。

答案 1 :(得分:25)

问题在于您的init_printing语句。在笔记本中,你不想运行乳胶,而应该使用mathjax,所以试试这个:

init_printing(use_latex='mathjax')

当我使用它时,我到处都能得到正常的漂亮打印,即使我有一个表情符号作为单元格的最后一行。

答案 2 :(得分:2)

我已经问过a similar question(现在已经链接到这个)。 阅读答案并稍作修改后,我得出结论,可以得到三种输出类型:

  1. “不漂亮”,纯文本...“低质量”。 这就是通过print(expression)

    获得的
  2. 纯净的纯文字...“中等品质”。 这就是从中获得的

     import sympy as sym
     sympy.pprint(expression)
    

它仍然使用相同的字体,并且仅使用字符来组合数学表达式。但这可以例如提高乘方数,通过布置水平线拉分数等。

  1. 漂亮,带有图形,符号等...“高品质”。 这就是从中获得的

     import IPython.display as disp
     disp.display(expression)
    

这与作为笔记本单元的输出所获得的相同,但是现在是命令的结果。然后,一个笔记本单元中可以有多个这样的输出

值得注意的是:

  1. sym.init_printing(...影响sym.pprint的输出。

  2. sym.latex(expression)为表达式生成一个LaTeX字符串。 disp.Math(...从LaTeX生成表达式。 这两个可能很有用。 因此,disp.display(disp.Math(sym.latex(expression)))会产生与 disp.display(expression)

答案 3 :(得分:1)

这有效,

from IPython.display import display, Latex
from sympy import *

x = symbols('x')
display(x)

int_x = Integral(cos(x)*exp(x), x)
result = "$${} = {}$$".format(latex(int_x), latex(int_x.doit()))
display(Latex(result))

derv_x = Derivative(cos(x)*exp(x), x)
result = "$${} = {}$$".format(latex(derv_x), latex(derv_x.doit()))
display(Latex(result))

亲自尝试。