2012-04-05 8 views
0

私はMathematicaを初めて使用しています。私は10 000回13の数字(12数字+ 1は開始番号)を生成するこのテーブルを持っています。私はすべての10,000番目の13番目の数字からヒストグラムを作成する必要があります。私はそれが非常に明確で、説明するのはかなり難しいと思う。Mathematicaの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}] 

次ヒストグラムが一つのテーブルにすべての13の数字を取るテーブル可能性のために結果 - ヒストグラムを作成するのは非常に簡単であるより。たぶん "選択"?あるいは、これを解決する他の方法を知っているかもしれません。

+1

はこれが何をしたいですか? – mohit6up

+0

Thxたくさん - 私はK = F [[All、13]]を見つけることができましたが、これはずっと優れています! – seniorita

+0

'F [[All、-1]]'も同様に動作します。 – Heike

答えて

2

あなたは(あなたが必要なものを部品に応じて)などFirstのような、より専門的なコマンドの一部、RestMostと(あなたが必要とする1)LastPartを使用して、リストの別の部分にアクセスしたりすることができます。コメントに記載されているように、Histogram[Last/@F]またはHistogram[F[[All,-1]]]は正常に動作します。

あなたの質問の一部ではありませんでしたが、私はあなたの特定の問題のためにできることを非常にスピードアップすることに注意したいと思います。 Tableコマンドの内部にあるので、MuSigmaなどを10,000回定義しています。 の中にFoldListが入っているので、定数でもMu - Sigma^2/2)*t + Sigma*Sqrt[t]は120,000回も再計算されます。私のマシン上で

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倍高速です:

私は地元の定数の WithTable内の他の再定義されているもののため Moduleを使用
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} 

Xi)、またはローカル定数(beta)に基づく計算です。 This question on the Mathematica StackExchangeは、ModuleBlockとの対比で、Withを使用するときの説明に役立ちます。 (Mathematicaのスタックエキスエクスチェンジをさらに探求することをお勧めします。これは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秒との違いはほとんど心配する価値がありません。

enter image description here

あなたはSeedRandomでシードを設定しているので、すべての3つのコード例は、まったく同じ結果を出すことを確認することは容易です。

0

私のコメントの答えを作る: `ヒストグラム[ラスト/ @のF]`: Histogram[Last /@ F]

関連する問題