Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy随机数发生器与lambda函数_Python_Numpy_Random - Fatal编程技术网

Python Numpy随机数发生器与lambda函数

Python Numpy随机数发生器与lambda函数,python,numpy,random,Python,Numpy,Random,我试图创建一个随机变量列表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](

我试图创建一个随机变量列表
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函数。发生了什么事?我完全糊涂了。

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

    wtfuns.append(('bernoulli p='+str(p),lambda p=p,**x: binom(p,**x)))
“p=p”东西将p的当前值捕获到一个本地值中,该本地值与函数一起携带。

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