0

私は Mathematica を初めて使いましたが、1 つのことに問題があります。10 000 x 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 番目の数値をすべて 1 つのテーブルにまとめたテーブルになる可能性があります。ヒストグラムを作成するのは非常に簡単です。たぶん「選択」で?または、これを解決する他の方法を知っているかもしれません。

4

2 に答える 2

2

リストのさまざまな部分にアクセスするには、Partまたは(必要な部分に応じて)、、、、(必要な部分)などのより特殊なコマンドを使用Firstします。コメントに記載されているように、または正常に動作します。RestMostLastHistogram[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をさらに探索することをお勧めします。)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、3つのコード例すべてがまったく同じ結果を生成することを簡単に確認できます。

于 2012-04-06T00:53:40.327 に答える
0

私のコメントを答えにする: Histogram[Last /@ F]

于 2012-04-20T14:05:10.710 に答える