python - 无法用科学计数法打印出 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-16
是0.000000000000000222
如何2.22e-16
在 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+20
then 打印,即从ratios_ztest返回的内容- 如果您对此结果不满意,则需要寻找其他类型的库来满足您的需求并在内部使用一些更高的精度。
推荐阅读
- django - 带有时区感知的 Django 过滤器 __date
- git - 有人在我拉取远程仓库后从远程仓库中删除了提交,我如何在下一次 git pull 时将其保留在本地?
- json - Gatsbyjs 中的 GraphQL - 仅返回包含特定字段的数据
- linkedin - 如何在 v2 中获取我在 v1 中的请求时能够收到的字段?
- c++ - 使用模板在 C++ 中编写 get 组件方法
- mysql - MYSQL 排序结果分组前返回最新记录
- node.js - 如何解决 Pug 中 Json 数组的迭代问题
- android - 如何限制我的应用程序被屏幕共享?
- javascript - 我如何`.filter()`一个数组/对象并返回一个带有原始键的新数组,而不是作为过滤器返回的索引数组/对象?
- azure - 部署前条件:或阶段前条件