生成多项分布

时间:2014-08-18 12:35:05

标签: c++ gsl multinomial

我正在尝试编写/找到一个代码片段/函数,它给出了一个数字和概率数组的多项分布,比如一个函数:

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

0 个答案:

没有答案