可以使用Part
访问列表的不同部分或(取决于你所需要的零件)一些较专门的命令,如First
,Rest
,Most
和(一个你需要的)Last
。正如评论中指出的,Histogram[Last/@F]
或Histogram[F[[All,-1]]]
将正常工作。
虽然这不是你的问题的一部分,但我想指出一些你可以为你的具体问题做些事情,这会加速它的速度。您正在定义Mu
,Sigma
等10,000次,因为它们在Table
命令中。您也重新计算 120,000次,即使它是一个常数,因为它在Table
内的FoldList
内。
在我的机器:
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
对于其他的Table
内重新确定的事情(Xi
)或者是基于局部常数的计算(beta
)。 This question on the Mathematica StackExchange将有助于解释何时使用Module
而不是Block
与With
。 (我鼓励你进一步探索Mathematica StackExchange,因为大部分Mathematica专家现在都在这里进行讨论。)
对于你的特定代码,使用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
种子,很容易验证,所有三个代码示例产生相同的结果。
这是你想要的东西:'直方图[尾/ @ F]'? – mohit6up 2012-04-05 13:21:46
Thx很多 - 我设法找到K = F [[All,13]]但是这样好多了,thx! – seniorita 2012-04-05 13:39:00
'F [[All,-1]]'也可以。 – Heike 2012-04-05 13:53:48