科学/指数符号与ipython笔记本中的同情

时间:2014-08-09 20:21:26

标签: formatting output ipython ipython-notebook sympy

如何在ipython笔记本中设置科学记数法的阈值?我想设置[0.01,100]之类的所有数字outisde以科学计数法打印,但阈值似乎要高得多。即。

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

In [166]:  1.e28*x
Out[166]:  1.0e+28*x

因为我使用了sympy,所以我无法将该号码发送到格式化的打印声明,即

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

1 个答案:

答案 0 :(得分:1)

我认为这取决于底层Float对象的精度。

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

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'

这会更改字符串打印机,这是sstrprint使用的打印机。看起来像LaTeX打印机,你可能想在笔记本电脑中使用,自动执行此操作。

我们应该添加一种更简单的方法来设置它,而不会改变精度。选项在mpmath中,它们只是没有在SymPy打印机中公开。我为此打开了https://github.com/sympy/sympy/issues/7847