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 解决了这个问题。