是否有将值和错误转换为科学计数法的 python 模块?

Posted

技术标签:

【中文标题】是否有将值和错误转换为科学计数法的 python 模块?【英文标题】:Is there a python module that convert a value and an error to a scientific notation? 【发布时间】:2013-06-13 13:36:46 【问题描述】:

假设我有两个数字,v = 0.01342err = 0.0004。在科学记数法下,这将被写为(13.4 ± 0.4)e-3。是否有进行该转换的功能(可能在 scipy 上)?自然,重要的是数字而不是± 符号。在网上搜索,我了解到有(是?)函数(s?)它吃一个数字来转换和一些想要的数字,然后他们吐出结果。这不是我要寻找的。我写过一次,但结果很丑。

【问题讨论】:

【参考方案1】:

我不明白你最后几行的意思,但是当你有像你这样的特定输出时,你通常必须自己写。

def sci_not(v,err,rnd=1):
    power = - int(('%E' % v)[-3:])+1
    return '(0 +/- 1)e2'.format(
            round(v*10**power,rnd),round(err*10**power,rnd),power)

这就是诀窍

>>> v = .01342
>>> err = .0004
>>> sci_not(v,err)
(13.4 +/- 0.4)e3

编辑:如果您将字符串设为 unicode,则可以输入 ± 字符,但只有在使用打印语句时结果才会看起来很漂亮。

将之前的return语句替换为

return u'(0 \u00B1 1)e2'.format(
            round(v*10**power,rnd),round(err*10**power,rnd),power)

返回

>>> sci_not(v,err)
u'(13.4 \xb1 0.4)e3'
>>> print sci_not(v,err)
(13.4 ± 0.4)e3

【讨论】:

没那么简单。如果错误值以 1 开头,则 err 将四舍五入为两位数。在对 err 进行四舍五入后,就知道要舍入多少位数。如果我有 v = 235.3654,并且 err= 0.143,从 sci_not 我得到 (23.5 +/- 0.0)e-1 而不是 (23.537 +/- 1.4)e1。变量pov 应该从err 估计,加上其余代码需要相应地更正。【参考方案2】:

我不知道这是否正是您要查找的内容,但您可以使用 .format 以科学计数法显示数字

v = 0.01342
err = 0.0004

print ('(:.2e'.format(float(v)) + ' +/- ' + ':.2e'.format(float(err)) + ')')

将输出以下内容:

(1.34e-02 +/- 4.00e-04)

:.2e 的 .2 指定精度,防止任何过于丑陋的数字

【讨论】:

目标是通过函数计算:.2e中的2。我需要做大约 80 项。

以上是关于是否有将值和错误转换为科学计数法的 python 模块?的主要内容,如果未能解决你的问题,请参考以下文章

科学记数法和从 DB 输出到 Python 中 JSON 的转换

是否有将 py 文件转换为 apk 的模块?

在python中将数组的元素从科学计数法转换为十进制计数法

python csv writer用科学计数法写入数组

在 Python 中转换为科学计数法 (A × 10^B)

将科学记数法转换为十进制 - python