2017-12-28 44 views
5

私はマルコフチェーン のようなものをシミュレーションし、discrete_distributionを使って状態s_iからs_jの変化をシミュレートしようとしています。 もちろん、これはベクトルではなく行列です。 だから私は試してみます。"discrete_distribution"のベクトルを設定する方法

std::vector <uint16_t> v {{...}, 
          {...}, 
          ... 
          {...},}; 

std::vector <std::discrete_distribution <uint16_t> > distr(n, std::distribution <uint16_t> (v.begin(), v.end())); 

しかしこれは機能しません。

注:私はちょうど1ベクトルをしようとした場合、これはuint16_tのベクトルである。このanswer

に基づいて

// CHANGE v by v[0] 
std::vector<std::discrete_distribution <uint64_t>> distr(1, std::discrete_distribution <uint64_t> (vecs[0].begin(), vecs[0].end())); 

に動作します私は

std::vector <std::discrete_distribution <uint16_t> > distr(n, std::distribution <uint16_t> (v.begin(), v.end())); 

が正しくないことを知っていますしかし、私は、v1からvへの変化について、離散分布のベクトルを使用することが可能であることを示すために

+0

これらのスローアウェイベクトルを 'v1'というように作成するのではなく、ネストされたveワンショットでctor? – tadman

+1

私はそれを行う方法を知らなかったので。しかし、以下の答えで今私は知っている。 –

+0

これはかなりシンプルなことですが、ヴィットリオはそれをうまく説明します。この質問は主にそれに関するものですか、 'discrete_distribution'部分にはまだ問題がありますか? – tadman

答えて

5

リストの初期化を使用すると、ネストされたベクトルを初期化できます。例:

std::vector<std::vector<int>> v{ 
    {1, 2, 3}, 
    {4, 5, 6}, 
    {7, 8, 9} 
}; 
+0

リストの初期化でも一時ファイルが作成されることに注意してください。 [std :: initializer_listのコスト](https://akrzemi1.wordpress.com/2016/07/07/the-cost-of-stdinitializer_list/)を参照してください。 – Thomas

2

私はあなたがディストリビューション

std::vector<std::discrete_distribution <uint64_t>> distr; 
    set_distributions(distr, vecs); 
のベクトルを空にしたときに、このテンプレート

template<typename T> 
void set_distributions(std::vector< std::discrete_distribution <T> > &distr, const std::vector< std::vector<T> > &vecs){ 
    for (uint64_t i = 0; i < vecs.size(); ++i) { 
    distr.push_back(std::discrete_distribution <uint64_t> (vecs[i].begin(), vecs[i].end())); 
    } 

} 

と、この機能を持つを使用して、このanswer

にようにそれを行うための方法を見つけます

+1

あなたのコードは 'std :: transform'を' std :: back_inserter':https://godbolt.org/g/DcxeUv – Justin

+0

1行でも可能ですか? 'std :: discrete_distribution dist(v.begin()、v.end())のように' '私はただ一つの行とそのばかげたものですべてを望むことを知っていますが...私は学ぶためにばかげた質問をする必要があります。ランダム突然変異を有する遺伝的アルゴリズムのようなものである。 –

+1

実際には、あなたは基本的にアウトパラメータを使用しているので、非const参照を取るのではなく、直接結果を返すほうが良いかもしれません。](https://godbolt.org/g/okm2fg) – Justin

関連する問題