报告不确定性:给定平均值和标准误差,仅显示有效数字
Report uncertainty: given a mean and the standard error, show only significant figures
目的是展示几个观察的结果
不必要的数字,即显示一个值
与给定一致的有效数字的数量
不确定性。
例如,如果计算 mean=123.45
和 err=0.0012345
那么
预期输出可能看起来像 123450 ± 1.2 (× 10-3) 其中
使用以下规则:
- 错误总是有一位或两位有效数字。如果第一个是两个
数字是
1
(忽略前导零)
- 平均值四舍五入以去除不确定的数字,除了
最后一个 ("stop the mean at the same decade as that of the first significant (non-zero) digit in the SEM")。如有必要,添加尾随零以显示与错误对应的精度。
如何在 Python 中使用:
import statistics
mean = statistics.mean(measurements)
err = statistics.stdev(measurements, mean) / len(measurements) ** 0.5
print("{} ± {} (×10<sup>{}</sup>)".format(*round_to_uncertainty(mean, err)))
问题是如何实现表达上述规则 1 和 2 的 round_to_uncertainty(value,
uncertainty)
函数。
注意:术语误差、不确定性在
问题。参见 the Guide to the Expression of Uncertainty in Measurement (GUM). Here's a related question for R。
decimal
模块可以方便的操作数字的十进制表示:
from decimal import Decimal
def round_to_uncertainty(value, uncertainty):
# round the uncertainty to 1-2 significant digits
u = Decimal(uncertainty).normalize()
exponent = u.adjusted() # find position of the most significant digit
precision = (u.as_tuple().digits[0] == 1) # is the first digit 1?
u = u.scaleb(-exponent).quantize(Decimal(10)**-precision)
# round the value to remove excess digits
return round(Decimal(value).scaleb(-exponent).quantize(u)), u, exponent
示例:
for mean, err in [
(123.45, 0.0012345), # 123450 ± 1.2 (×10<sup>-3</sup>)
(8165.666, 338.9741), # 82 ± 3 (×10<sup>2</sup>)
]:
print("{} ± {} (×10<sup>{}</sup>)".format(*round_to_uncertainty(mean, err)))
输入 123.45
、0.0012345
报告为 123450 ± 1.2
(×10-3)。还有 8165.666
、338.9741
根据当前问题的规则转换为 82 ± 3 (×102)。
目的是展示几个观察的结果 不必要的数字,即显示一个值 与给定一致的有效数字的数量 不确定性。
例如,如果计算 mean=123.45
和 err=0.0012345
那么
预期输出可能看起来像 123450 ± 1.2 (× 10-3) 其中
使用以下规则:
- 错误总是有一位或两位有效数字。如果第一个是两个
数字是
1
(忽略前导零) - 平均值四舍五入以去除不确定的数字,除了 最后一个 ("stop the mean at the same decade as that of the first significant (non-zero) digit in the SEM")。如有必要,添加尾随零以显示与错误对应的精度。
如何在 Python 中使用:
import statistics
mean = statistics.mean(measurements)
err = statistics.stdev(measurements, mean) / len(measurements) ** 0.5
print("{} ± {} (×10<sup>{}</sup>)".format(*round_to_uncertainty(mean, err)))
问题是如何实现表达上述规则 1 和 2 的 round_to_uncertainty(value,
uncertainty)
函数。
注意:术语误差、不确定性在 问题。参见 the Guide to the Expression of Uncertainty in Measurement (GUM). Here's a related question for R。
decimal
模块可以方便的操作数字的十进制表示:
from decimal import Decimal
def round_to_uncertainty(value, uncertainty):
# round the uncertainty to 1-2 significant digits
u = Decimal(uncertainty).normalize()
exponent = u.adjusted() # find position of the most significant digit
precision = (u.as_tuple().digits[0] == 1) # is the first digit 1?
u = u.scaleb(-exponent).quantize(Decimal(10)**-precision)
# round the value to remove excess digits
return round(Decimal(value).scaleb(-exponent).quantize(u)), u, exponent
示例:
for mean, err in [
(123.45, 0.0012345), # 123450 ± 1.2 (×10<sup>-3</sup>)
(8165.666, 338.9741), # 82 ± 3 (×10<sup>2</sup>)
]:
print("{} ± {} (×10<sup>{}</sup>)".format(*round_to_uncertainty(mean, err)))
输入 123.45
、0.0012345
报告为 123450 ± 1.2
(×10-3)。还有 8165.666
、338.9741
根据当前问题的规则转换为 82 ± 3 (×102)。