0

我是 Mathematica 的新手,我在一件事上遇到了困难。我有这个表,它生成 10 000 乘以 13 个数字(12 个数字 + 1 是一个起始数字)。我需要从所有 10 000 个第 13 个数字中创建一个直方图。我希望它很清楚,很难解释。

这是表格:

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}]

以下直方图的结果可能是一个表格,它将所有第 13 个数字放到一个表格中 - 比创建直方图非常容易。也许用“选择”?或者,也许您知道解决此问题的其他方法。

4

2 回答 2

2

您可以使用Part或(取决于您需要的部分)一些更专业的命令来访问列表的不同部分,例如、First和(您需要的那个)。如评论中所述,或将正常工作。RestMostLastHistogram[Last/@F]Histogram[F[[All,-1]]]

尽管这不是您问题的一部分,但我想指出您可以针对您的特定问题做的一些事情,这将大大加快它的速度。您正在定义MuSigma10,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 专家都在这里闲逛。)TableXibetaModuleBlockWith

对于您的特定代码,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,所以很容易验证所有三个代码示例是否产生完全相同的结果。

于 2012-04-06T00:53:40.327 回答
0

让我的评论成为答案: Histogram[Last /@ F]

于 2012-04-20T14:05:10.710 回答