Formatting ipython笔记本中带sympy的科学/指数记数法

Formatting ipython笔记本中带sympy的科学/指数记数法,formatting,output,ipython,ipython-notebook,sympy,Formatting,Output,Ipython,Ipython Notebook,Sympy,ipython笔记本中的科学记数法阈值是如何设置的?我想设置所有数字,比如[0.01100]用科学记数法打印,但阈值似乎要高得多。i、 e In [165]: x = sympy.Symbol('x'); 1.e8*x Out[165]: 100000000.0*x 但是 因为我使用的是Symphy,所以无法将号码发送到格式化的打印语句,即 In [167]: print "%.2e" % (1.e8*x) ERROR: TypeError: float argument required

ipython笔记本中的科学记数法阈值是如何设置的?我想设置所有数字,比如[0.01100]用科学记数法打印,但阈值似乎要高得多。i、 e

In [165]:  x = sympy.Symbol('x'); 1.e8*x
Out[165]:  100000000.0*x
但是

因为我使用的是Symphy,所以无法将号码发送到格式化的打印语句,即

In [167]: print "%.2e" % (1.e8*x)
ERROR: TypeError: float argument required, not Mul [IPython.core.interactiveshell]

我相信这取决于底层Float对象的精度

SymPy使用mpmath提供任意精度的浮点数。默认精度为15位,但您可以设置任何精度。当它不能用给定的精度表示整数时,它看起来像是使用了科学记数法。通过直接构造浮点对象,可以强制使用给定的精度:

In [30]: Float('100', 3)
Out[30]: 100.

In [31]: Float('1000', 3)
Out[31]: 1.00e+3
但是,请注意,这也会影响其他事情。所有超过三的数字都将四舍五入

In [32]: Float('1.23456', 3)
Out[32]: 1.23
如果您不希望在
e+
部分之前有额外的零,可以在字符串打印机中传入设置:

In [45]: from sympy.printing.str import StrPrinter

In [44]: StrPrinter({'full_prec': False}).doprint(Float('10000000', 5))
Out[44]: '1.0e+7'
这将更改字符串打印机,该打印机由
sstr
print
使用。它看起来像是LaTeX打印机,这是你可能想在笔记本中使用的,它会自动完成这项工作


我们应该添加一种更简单的方法来设置它,而不改变精度。这些选项在mpmath中有,只是在SymPy打印机中没有显示。我已经为这个打开了大门

谢谢@asmurer,如果这些东西直接暴露出来,那就太棒了。由于ipynb主要面向可呈现性,因此在ipython配置文件中设置一些默认设置似乎也不错。
In [45]: from sympy.printing.str import StrPrinter

In [44]: StrPrinter({'full_prec': False}).doprint(Float('10000000', 5))
Out[44]: '1.0e+7'