如何从Mathematica中的FoldList创建的表中选择最后一列数字

时间:2012-04-05 13:15:59

标签: numbers wolfram-mathematica histogram

我是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个数字都带到一个表格 - 而不是创建直方图非常容易。也许用“选择”?或许你知道解决这个问题的其他方法。

2 个答案:

答案 0 :(得分:2)

您可以使用Part或(根据您需要的部分)访问列表的不同部分,使用一些更专业的命令,例如FirstRest,{{1和(你需要的那个)Most。如评论中所述,LastHistogram[Last/@F]可以正常使用。

虽然这不是你问题的一部分,但我想指出一些你可以为你的具体问题做的事情,这将极大地加速它。您定义了Histogram[F[[All,-1]]]Mu等10,000次,因为它们位于Sigma命令中。您也在重新计算Table 120,000次,即使它是常量,因为您将其放在Mu - Sigma^2/2)*t + Sigma*Sqrt[t]内的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用于ModuleTable)中重新定义的其他内容,或者是基于局部常量的计算( Xi)。 This question on the Mathematica StackExchange将有助于说明何时使用betaModuleBlock的对比。 (我鼓励您进一步探索Mathematica StackExchange,因为现在大多数Mathematica专家都在这里。)

对于您的特定代码,并不真正需要使用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报告0.377秒 - 但是0.4秒的这种差异几乎不值得担心。

enter image description here

因为您使用Timing设置种子,所以很容易验证所有三个代码示例都会产生完全相同的结果。

答案 1 :(得分:0)

让我的评论回答: Histogram[Last /@ F]