我如何将测量值及其误差估计四舍五入到 Python 中指定数量的有效数字?
How would I round a measurement and its error estimate to a specified number of significant figures in Python?
我想要一个给定测量和误差估计的函数,将误差舍入到指定数量的有效数字,并将测量值舍入到相应的数字。以下是输入和预期输出的示例:
>>> g = 6.6740813489701e-11
>>> g_err = 0.0003133212341e-11
>>> round_sig_figs(g, g_err, sig_figs=2)
(6.67408e-11, 3.1e-15)
Typically errors are reported with 2 significant figures. 我想要一个函数,它将 return 具有这种精度水平的值的误差估计,并将该值截断到正确的小数位。
这个函数完成了这个任务,但如果有更 Pythonic 的方法请添加另一个答案。
import numpy as np
def round_sig_figs(val, val_err, sig_figs=2):
'''
Round a value and its error estimate to a certain number
of significant figures (on the error estimate). By default 2
significant figures are used.
'''
n = int(np.log10(val_err)) # displacement from ones place
if val_err >= 1:
n += 1
scale = 10 ** (sig_figs - n)
val = round(val * scale) / scale
val_err = round(val_err * scale) / scale
return val, val_err
这是列出的示例:
>>> g = 6.6740813489701e-11
>>> g_err = 0.0003133212341e-11
>>> round_sig_figs(g, g_err)
(6.67408e-11, 3.1e-15)
下面是一个大于 1 但四舍五入到小数位的值的示例:
>>> g_earth = 9.80665
>>> g_earth_err = 0.042749999
>>> round_error(g_earth, g_earth_err)
(9.807, 0.043)
这是一个比 1 大得多的值的示例:
>>> r = 6371293.103132049
>>> r_err = 14493.004419708
>>> round_error(r, r_err)
(6371000.0, 14000.0)
Python 有一个 built-in 函数来实现这个:
round(num, ndigits)
我想要一个给定测量和误差估计的函数,将误差舍入到指定数量的有效数字,并将测量值舍入到相应的数字。以下是输入和预期输出的示例:
>>> g = 6.6740813489701e-11
>>> g_err = 0.0003133212341e-11
>>> round_sig_figs(g, g_err, sig_figs=2)
(6.67408e-11, 3.1e-15)
Typically errors are reported with 2 significant figures. 我想要一个函数,它将 return 具有这种精度水平的值的误差估计,并将该值截断到正确的小数位。
这个函数完成了这个任务,但如果有更 Pythonic 的方法请添加另一个答案。
import numpy as np
def round_sig_figs(val, val_err, sig_figs=2):
'''
Round a value and its error estimate to a certain number
of significant figures (on the error estimate). By default 2
significant figures are used.
'''
n = int(np.log10(val_err)) # displacement from ones place
if val_err >= 1:
n += 1
scale = 10 ** (sig_figs - n)
val = round(val * scale) / scale
val_err = round(val_err * scale) / scale
return val, val_err
这是列出的示例:
>>> g = 6.6740813489701e-11
>>> g_err = 0.0003133212341e-11
>>> round_sig_figs(g, g_err)
(6.67408e-11, 3.1e-15)
下面是一个大于 1 但四舍五入到小数位的值的示例:
>>> g_earth = 9.80665
>>> g_earth_err = 0.042749999
>>> round_error(g_earth, g_earth_err)
(9.807, 0.043)
这是一个比 1 大得多的值的示例:
>>> r = 6371293.103132049
>>> r_err = 14493.004419708
>>> round_error(r, r_err)
(6371000.0, 14000.0)
Python 有一个 built-in 函数来实现这个:
round(num, ndigits)