数値と確率配列を指定して多項分布を返すコード片/関数を作成/検索しようとしています。たとえば、関数:
Mult(N, pp[])
たとえば、pp={0.3, 0.2, 0.5} の場合 (pp は可変サイズ、たとえば 2 ~ 10 個の要素を持つことができます)。
Mult(10, pp[])
次のような出力が得られます。
1,1,8
3,1,6
2,3,5
さまざまな機会に呼び出されたとき。
gsl を使って次のようなことが考えられますが、さまざまな機会に繰り返し呼び出されると、これは良くありません。以下に引用したコードが良くないことは理解していますが、より良いコードを作成するための提案を楽しみにしています。ありがとう。
std::vector<int> Mult(int numb, std::vector<double> prob_array)
{
const gsl_rng_type * T2;
gsl_rng * r2;
srand(); // srand(time(NULL));
unsigned int Seed2 = 1234567; // rand();
gsl_rng_env_setup();
T2 = gsl_rng_default;
r2 = gsl_rng_alloc (T2);
gsl_rng_set (r2, Seed2);
size_t k = prob_array.size();
double ppp[k]; // Probability array
for(int ii=0; ii<prob_array.size(); ++ii) {
ppp[ii] = prob_array[ii];
}
unsigned int mult_op[k];
gsl_ran_multinomial(r2, k, numb, ppp, mult_op);
std::vector<int> multi;
for(int ii=0; ii<kk; ++ii ){
multi.push_back(mult_op[ii]);
}
return multi;
}