python – 将所有SymPy输出装饰到Jupyter笔记本

每当SymPy将一个浮点输出回Jupyter笔记本时,它就会以最佳精度显示整数.作为一名工程师,我发现这很难解决这个问题,他习惯于读取10的倍数(纳米,微米,毫米,千米,千兆,千兆等)的数字.

我编写了一个自定义函数to_engg(),它接受一个数字并返回一个包含任意精度数字的字符串,并在末尾添加工程前缀.

如何拦截SymPy输出并首先通过我的to_engg()函数处理它?

SymPy: Okay, now I’m going to spit out this ugly float 65722045.8015267
Me: Not so fast. Go through to_engg() first.
SymPy: ptui!
Some magic happens here
Jupyter: Here you go. 65.7 M

我能想到的最通用的方法是通过装饰器,因此我可以使用除to_engg()之外的任何其他函数.

最佳答案 SymPy支持任意精度级别,因此您可以从您想要的精度开始,例如Float(’10 .3′,3).

否则,您需要创建一个自定义打印机,该子打印机将sympy.printing.latex.LatexPrinter子类化并覆盖_print_Float以使用您想要的精度(请参阅default implementation),并使用init_printing(latex_printer = YourSubclass().doprint).

点赞