【发布时间】:2014-05-15 15:05:49
【问题描述】:
我有一个函数
def getSamples():
p = lambda x : mlab.normpdf(x,3,2) + mlab.normpdf(x,-5,1)
q = lambda x : mlab.normpdf(x,5,14)
k=30
goodSamples = []
rightCount = 0
totalCount = 0
while(rightCount < 100000):
z0 = np.random.normal(5, 14)
u0 = np.random.uniform(0,k*q(z0))
if(p(z0) > u0):
goodSamples.append(z0)
rightCount += 1
totalCount += 1
return np.array(goodSamples)
我生成 100000 个样本的实现需要很长时间。我怎样才能用itertools 或类似的东西让它更快?
【问题讨论】:
-
mean和covariance来自哪里? -
它可以是任何值。我改了
-
如果您需要正好 10^5 个“好”样本,请不要使用 python 列表,而是使用数组。 (顺便说一句,您不需要在 return 语句中进行显式转换)追加操作并不那么昂贵,但它可以总结。
normal = np.random.normal在您的循环之前,每次通话可以为您节省大约 5-20%。在提出如此广泛的问题之前,事先进行一些分析也不会受到伤害。
标签: python performance numpy itertools