【发布时间】:2022-01-02 10:29:39
【问题描述】:
我为生日问题定义了一个非常简单的函数:
from math import comb, factorial
import numpy as np
def birthday(k):
return 1-((factorial(k)*comb(365,k))/(365**k))
该功能有效,因为k=23 给出:
[in] birthday(23)
[out] 0.5072972343239854
我想用 k 从 1 到 50 迭代列表并将概率结果保存到列表 prob,如下所示:
klist=np.arange(1,51)
prob=[]
for k in klist:
prob.append(birthday(k))
对于 k=1 到 k=7,没有问题,但从 k=8 开始,突然输出对于非常大的负值不再有意义。我在这里做错了什么? (显示 k=1 到 10 的输出)
[ 1 2 3 4 5 6 7 8 9 10 ]
[0.0, 0.002739726027397249, 0.008204165884781345, 0.016355912466550326, 0.02713557369979358, 0.040462483649111536, 0.056235703095975365, -203.08817475498518, -20769.916905383445, -11786425.811859423]
但是,只是运行:
[in] birthday(10)
给出正确的:
[out] 0.11694817771107768
【问题讨论】:
-
我认为这与numpy的int32和python的int之间的差异有关。因为如果你这样做
prob.append(birthday(int(k)))它工作正常。所以也许可以考虑一下。
标签: python list function loops