首页 > 解决方案 > 无法用科学计数法打印出 p 值

问题描述

我无法在python 中打印出正确的比例z-test p值

from statsmodels.stats.proportion import proportions_ztest
from decimal import Decimal
count = 6726
nobs = 592458
value = 0.6407
stat, pval = proportions_ztest(count, nobs, value)
print('p-value =','{:.20e}'.format(Decimal(pval)))

它打印出来p-value = 0.00000000000000000000e+20 我认为它是零

我使用另一个程序来计算 p 值,它2.22e-160.000000000000000222
如何2.22e-16在 python 中打印出来?

标签: python

解决方案


无法重现打印问题 - 如果您的结果包含2.22e-16在其中 - 您可以使用以下方式打印它:

from decimal import Decimal 

whatever = 2.22e-16
print('{:.20e}'.format(Decimal(whatever)))

输出:

2.22000000000000008179e-16

即使您使用(较低分辨率的)浮点设置,2.22e-16您也会得到与您观察到的不同的输出(0.00000000000000000000e+20):

# just using floats
whatever = 2.22e-16 
print('{:.20e}'.format(whatever ))

输出:

# different from "input" due to float representation error
p-value = 2.21999999999999997153e-20  

我首先认为您可能需要调整精度,但是当您从数字创建 Decimal() 时,python 会自动为您执行此操作:请参阅getcontext().prec Doku


您使用的ratios_ztest返回一个浮点数 - 如果它按0.00000000000000000000e+20then 打印,即从ratios_ztest返回的内容- 如果您对此结果不满意,则需要寻找其他类型的库来满足您的需求并在内部使用一些更高的精度。


推荐阅读