0

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

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;
}
4

0 回答 0