您可以使用Part
或(取决于您需要的部分)一些更专业的命令来访问列表的不同部分,例如、First
和(您需要的那个)。如评论中所述,或将正常工作。Rest
Most
Last
Histogram[Last/@F]
Histogram[F[[All,-1]]]
尽管这不是您问题的一部分,但我想指出您可以针对您的特定问题做的一些事情,这将大大加快它的速度。您正在定义Mu
等Sigma
10,000 次,因为它们在Table
命令中。您还要重新计算Mu - Sigma^2/2)*t + Sigma*Sqrt[t]
120,000 次,即使它是一个常数,因为您将它FoldList
放在Table
.
在我的机器上:
F = Table[(Xi = RandomVariate[NormalDistribution[], 12];
Mu = -0.00644131;
Sigma = 0.0562005;
t = 1/12; s = 0.6416;
FoldList[(#1*Exp[(Mu - Sigma^2/2)*t + Sigma*Sqrt[t]*#2]) &, s,
Xi]), {SeedRandom[2]; 10000}]; // Timing
{4.19049, Null}
这种替代方法快十倍:
F = Module[{Xi, beta}, With[{Mu = -0.00644131, Sigma = 0.0562005,
t = 1/12, s = 0.6416},
beta = (Mu - Sigma^2/2)*t + Sigma*Sqrt[t];
Table[(Xi = RandomVariate[NormalDistribution[], 12];
FoldList[(#1*Exp[beta*#2]) &, s, Xi]), {SeedRandom[2];
10000}] ]]; // Timing
{0.403365, Null}
我With
用于局部常量以及在( )Module
中重新定义的其他事物或基于局部常量 ( ) 的计算。Mathematica StackExchange 上的这个问题将有助于解释何时使用vs vs 。(我鼓励您进一步探索 Mathematica StackExchange,因为现在大多数 Mathematica 专家都在这里闲逛。)Table
Xi
beta
Module
Block
With
对于您的特定代码,Part
实际上并不需要使用。而不是使用FoldList
,只是使用Fold
。它只保留折叠中的最终数字,这与 的输出中的最后一个数字相同FoldList
。所以你可以尝试:
FF = Module[{Xi, beta}, With[{Mu = -0.00644131, Sigma = 0.0562005,
t = 1/12, s = 0.6416},
beta = (Mu - Sigma^2/2)*t + Sigma*Sqrt[t];
Table[(Xi = RandomVariate[NormalDistribution[], 12];
Fold[(#1*Exp[beta*#2]) &, s, Xi]), {SeedRandom[2];
10000}] ]];
Histogram[FF]
以这种方式计算FF
甚至比以前的版本快一点。在我的系统上Timing
报告 0.377 秒 - 但与 0.4 秒的这种差异几乎不值得担心。
因为您使用 设置种子SeedRandom
,所以很容易验证所有三个代码示例是否产生完全相同的结果。