我正在尝试编写/找到一个代码片段/函数,它给出了一个数字和概率数组的多项分布,比如一个函数:
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;
}