蟒蛇迭代过程lambda函数
里面我有一个简单的python 功能蟒蛇迭代过程lambda函数
def positiveGauss(mean,stdev):
result = -1
while result < 0:
result = mean + np.random.randn()*stdev
return result
是否有可能做使用拉姆达同样的伎俩?它需要在lambda内进行迭代,但我仍然相信这是可能的。
对于多样性的缘故:
lambda m, s: next(x for x in (m + np.random.randn() * s for _ in iter(int, 1)) if x >= 0)
非递归的解决方案,利用了iter
和两个发生器表达式两个参数的形式的。
iter(int, 1)
调用int()
直到它返回1
,这根本不会发生。因此,内发电机表达
(m + np.random.randn() * s for _ in iter(int, 1))
是评价和产量m + np.random.randn() * s
无限期的发电机。外部生成器表达式逐个从内部表达式获取值,但仅生成等于或大于零的值。然后next
函数接收来自外部发生器的第一个值,这是内部发生器匹配条件产生的第一个值。
positive_gauss = lambda mean, stddev, result = -1: positive_gauss(mean, stddev, mean + np.random.randn()*stddev) if result < 0 else result
这是一个递归函数。我要打破它 -
lambda mean, stddev, result = -1: # takes 3 parameters
positive_gauss(mean, stddev, mean + np.random.randn()*stddev) if result < 0
#^Your first condition, if its true call the same function modifying result
else result # if the above one fails just return result.
是的,正如@ juanpa.arrivillaga这不应该被使用,因为它失去的匿名函数本质。
不错,但你应该指出*一个人不会使用这个*。实际上,既然你已经命名了你的lambda,它并不是真正符合lambda函数的精神。 –
@ hashcode55这真的很酷!谢谢!我不知道lambda可以递归。 – rth
@rth是的,他们确实可以。 Lambda函数受到函数式编程的启发,只有递归。没有循环。 – hashcode55
AFAIK,不,这不可能与lambda –
你完全想摆脱'while'吗?因为有一个统计方法来做到这一点。与逆归一化函数有关。您从区间[0,_t_](其中0 <_t_ class="text-secondary"> Elmex80s
@ Elmex80s我需要截断正态分布。分配必须是正态分布。这是我的旧统计课本的想法,也许不是最好的。 – rth