Python 蒙特卡罗模拟中样本均值的计算
我对n个样本进行了蒙特卡罗模拟。对于每个样本i,我需要计算值席,所以我可能得到的结果是: X=[X1,X2,…,Xn]Python 蒙特卡罗模拟中样本均值的计算,python,performance,mean,montecarlo,Python,Performance,Mean,Montecarlo,我对n个样本进行了蒙特卡罗模拟。对于每个样本i,我需要计算值席,所以我可能得到的结果是: X=[X1,X2,…,Xn] (这里席可以是矩阵或数)。< /P> 现在我想计算这些样本的平均值,我称之为Xmean。所以我需要得到这样的东西: Xmean=[X1,(X1+X2)/2,(X1+X2+X3)/3…,(X1+X2+…+Xn)/n] 在Python中,我编写了一段代码: for i in range(N): for j in range(i+1): Xmean(i) =
(这里席可以是矩阵或数)。< /P> 现在我想计算这些样本的平均值,我称之为Xmean。所以我需要得到这样的东西:
Xmean=[X1,(X1+X2)/2,(X1+X2+X3)/3…,(X1+X2+…+Xn)/n] 在Python中,我编写了一段代码:for i in range(N):
for j in range(i+1):
Xmean(i) = Xmean(i) + X(j)
Xmean(i) = Xmean(i) / (i+1)
它工作得很好,但太慢了,我想知道我是否可以加快这个代码?如果你们能给我推荐一些有趣的Python库,对蒙特卡罗模拟有帮助的话
谢谢,只需减少计算量
Xmean(0) = X(0)
for i in range(N-1):
Xmean(i+1) = (Xmean(i)*(i+1) + X(i+1))/(i+2)
结果:
mc0 26.023956370918587
mc1 0.1423197092108488
mc2 0.13584513496654083
当您在
xmean
中已有可用信息时,在每个循环迭代中重新计算x(1)…x(i)
上的和没有意义。Donbeo的numpy版本略快于我的纯Python版本,两者都比原始版本快近200倍(无论如何,对于这些数据而言)。如果使用numpy,应该很容易
import numpy as np
X = [1,5,3,8,6,9]
Xmean = np.cumsum(X)
Xmean = Xmean/np.array(range(1,len(X)+1)
谢谢,它确实更快:我认为这是正确的:Xmean=Xmean/np.array(范围(1,len(X)+1))
import numpy as np
X = [1,5,3,8,6,9]
Xmean = np.cumsum(X)
Xmean = Xmean/np.array(range(1,len(X)+1)