Python 3 为 Python 2 处理的操作给出 NaN
Python 3 gives NaN for operation that Python 2 handles
我尝试使用 scipy.stats.hypergeom
的计算在 Python 3.9.9 中 运行 时给出 nan
但在 Python 2.7 中工作正常。 18.我需要它 运行 它在 Python 3 因为我程序的其余部分是针对那个版本的。
我试过将所有数字都转换为相同的浮点类型并对数字进行四舍五入,但似乎没有任何方法适用于 Python 3. 我已经包含了我的代码和我得到的输出不同的版本。
代码
from scipy.stats import hypergeom
k = 526.8499999999999
nmk = 409.823
n = 936.6729999999999
m = 30079.555399999997
N = 59416.2896
p1 = hypergeom.cdf(k, N, m, n)
p2 = hypergeom.cdf(nmk, N, m, n)
print("p1 = " + str(p1) + " [" + str(type(p1)) + "]")
print("p2 = " + str(p2) + " [" + str(type(p2)) + "]")
Python 2.7.18
p1 = 0.999720238917 [<type 'numpy.float64'>]
p2 = 9.96805760427e-06 [<type 'numpy.float64'>]
Python 3.9.9
p1 = nan [<class 'numpy.float64'>]
p2 = nan [<class 'numpy.float64'>]
编辑: 我使用的 scipy
版本是 Python 2 的 0.13.0b1 和 Python 3 的 1.8.0 .
将 scipy
从版本 1.8.0 降级到 1.7.3 解决了这个问题。
我尝试使用 scipy.stats.hypergeom
的计算在 Python 3.9.9 中 运行 时给出 nan
但在 Python 2.7 中工作正常。 18.我需要它 运行 它在 Python 3 因为我程序的其余部分是针对那个版本的。
我试过将所有数字都转换为相同的浮点类型并对数字进行四舍五入,但似乎没有任何方法适用于 Python 3. 我已经包含了我的代码和我得到的输出不同的版本。
代码
from scipy.stats import hypergeom
k = 526.8499999999999
nmk = 409.823
n = 936.6729999999999
m = 30079.555399999997
N = 59416.2896
p1 = hypergeom.cdf(k, N, m, n)
p2 = hypergeom.cdf(nmk, N, m, n)
print("p1 = " + str(p1) + " [" + str(type(p1)) + "]")
print("p2 = " + str(p2) + " [" + str(type(p2)) + "]")
Python 2.7.18
p1 = 0.999720238917 [<type 'numpy.float64'>]
p2 = 9.96805760427e-06 [<type 'numpy.float64'>]
Python 3.9.9
p1 = nan [<class 'numpy.float64'>]
p2 = nan [<class 'numpy.float64'>]
编辑: 我使用的 scipy
版本是 Python 2 的 0.13.0b1 和 Python 3 的 1.8.0 .
将 scipy
从版本 1.8.0 降级到 1.7.3 解决了这个问题。