首页 > 解决方案 > chi2cdf上python

问题描述

所以我将 Matlab 翻译成 python 代码并遇到了这一行

Pv = chi2cdf(Devk,Md,'upper');

其中 Devk 是 3D 矩阵,Md 是 df=10。

我一直在寻找 Python 中的等价物。我发现了这个:

from scipy.stats import chi2
Pv = chi2.cdf(Devk,Md)

但是,这并没有给出类似的结果,我猜是因为 Matlab 有“上”参数。有谁知道如何在 Python 中实现这一点?

有人要求制作一些玩具数据来显示问题:

MATLAB:

Devk = [1,2,3,4,5]
Md = 10
Pv = chi2cdf(Devk,Md,'upper')
Pv =
0.9998    0.9963    0.9814    0.9473    0.8912

Python:

from scipy.stats import chi2
Devk = np.array([1,2,3,4,5])
Md = 10
Pv = chi2.cdf(Devk,Md)
Pv
Out[125]: array([0.00017212, 0.00365985, 0.01857594, 0.05265302, 0.10882198])

标签: pythonmatlabchi-squaredcdf

解决方案


我相信以下观点成立:

chi2cdf(..., 'upper') == (1 .- chi2cdf(...))

因此,在您的 Python 代码中,您可能必须这样做:

from scipy.stats import chi2

Pv = 1 - chi2.cdf(Devk, Md)

编辑:

更好用:

Pv = chi2.sf(Devk, Md)

因为,根据文档,生存函数sf()(也定义为1 - cdf())有时更准确。


推荐阅读