如何在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]
答案 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'
这会更改字符串打印机,这是sstr
或print
使用的打印机。看起来像LaTeX打印机,你可能想在笔记本电脑中使用,自动执行此操作。
我们应该添加一种更简单的方法来设置它,而不会改变精度。选项在mpmath中,它们只是没有在SymPy打印机中公开。我为此打开了https://github.com/sympy/sympy/issues/7847。