リストのさまざまな部分にアクセスするには、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}
この代替手段は10倍高速です:
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に関するこの質問は、いつ対対を使用するかを説明するのに役立ちます。(Mathematicaの専門家のほとんどが今ぶらぶらしている場所なので、Mathematica StackExchangeをさらに探索することをお勧めします。)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
、3つのコード例すべてがまったく同じ結果を生成することを簡単に確認できます。