Numpy随机数发生器与lambda函数

2024-10-01 04:51:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个随机变量列表wtfuns,我可以调用它:wtfuns[i](size=1000)来返回一个包含1000个特定随机变量样本的列表。为此,我使用lambda函数,如下所示:

wtfuns = []
pvals = [0.3,0.5,0.7]
for p in pvals:
    wtfuns.append(('bernoulli p='+str(p),lambda **x: binom(p,**x)))

for i in range(3):
    print(wtfuns[i][1](size=1000).mean())

输出

0.686
0.684
0.706

也就是说,在wtfuns[:,1]列中,我有相同的二项式随机变量,参数为0.7。但是,

for p in pvals:
    print(wtfuns[0][1](size=1000).mean())

产生

0.311
0.524
0.67

不知何故,p值通过引用传递给lambda函数。发生了什么事?我完全糊涂了


Tags: lambda函数in列表forsizemean样本
1条回答
网友
1楼 · 发布于 2024-10-01 04:51:40

是的,您的第一个定义捕获了对p的引用。随着p的变化,函数也随之变化。解决方案是使用一种技巧,将lambda转换为闭包:

    wtfuns.append(('bernoulli p='+str(p),lambda p=p,**x: binom(p,**x)))

“p=p”这个东西将p的当前值捕获到一个局部变量中,该变量与函数一起携带

相关问题 更多 >