考虑一下:
dist = Parallelize[
Table[RandomVariate[NormalDistribution[]], {100000}]];
我怎样才能创建一个递归函数:
Subscript[d, 1] = dist[[1]]
Subscript[d, 2] = .95 Subscript[d, 1] + dist[[2]]
Subscript[d, 3] = .95 Subscript[d, 2] + dist[[3]]
这样做直到Subscript[d, 100000]
谢谢。
令人惊讶的是,我第一次碰到这个。
答案 0 :(得分:6)
考虑一下:
dist = RandomVariate[NormalDistribution[], {100000}];
dist2 = Rest@FoldList[0.95 # + #2 &, 0, dist];
Subscript[d, x_] := dist2[[x]]
我通常不会这样使用下标;我不知道这可能会破坏什么。如果您描述了更多问题,我可能会有其他建议。
答案 1 :(得分:2)
如何使用
之类的东西In[1]:= dist = ParallelTable[RandomVariate[NormalDistribution[]], {100000}];//Timing
Out[1]= {0.15601, Null}
In[2]:= folded = FoldList[.95 #1 + #2 &, First@dist, Rest@dist]; // Timing
Out[2]= {0.056003, Null}
您可以与
进行比较In[3]:= Subscript[d, 1] = dist[[1]];
Do[Subscript[d, n] = 0.95 Subscript[d, n - 1] + dist[[n]],
{n, 2, Length@dist}] // Timing
Out[3]= {1.09607, Null}
In[4]:= Table[Subscript[d, n], {n, 1, Length@dist}] === folded
Out[4]= True