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