Matrix 如何有效地从高斯分布生成GSL矩阵?

Matrix 如何有效地从高斯分布生成GSL矩阵?,matrix,random-sample,gsl,Matrix,Random Sample,Gsl,使用从高斯分布中提取的条目生成gsl矩阵的最有效方法是什么 我知道名为gsl\u ran\u gaussian的函数,但据我所知,它只生成标量值。我尝试在双for循环中使用该函数填充矩阵,但对于我预期的应用程序来说,速度非常慢 我想生成3xN矩阵: 前两行的所有条目应填充来自相同零均值高斯方差分布V1的样本,而最后一行的条目应填充来自零均值高斯方差V2的样本 编辑: 我现在就是这样做的: gsl_matrix * M; M = gsl_matrix_calloc(3, size2); const

使用从高斯分布中提取的条目生成gsl矩阵的最有效方法是什么


我知道名为
gsl\u ran\u gaussian
的函数,但据我所知,它只生成标量值。我尝试在双for循环中使用该函数填充矩阵,但对于我预期的应用程序来说,速度非常慢

我想生成3xN矩阵: 前两行的所有条目应填充来自相同零均值高斯方差分布V1的样本,而最后一行的条目应填充来自零均值高斯方差V2的样本

编辑

我现在就是这样做的:

gsl_matrix * M;
M = gsl_matrix_calloc(3, size2);
const gsl_rng_type * T;
gsl_rng * r;

gsl_rng_env_setup();
T = gsl_rng_default;
r = gsl_rng_alloc(T);

for (uint16_t k=0; k<size2; k++) {
    for (uint8_t h=0; h<2; h++)
        gsl_matrix_set(M, h, k, gsl_ran_gaussian(r,S1));
    gsl_matrix_set(M, 2, k, gsl_ran_gaussian(r,S2));
}
gsl_矩阵*M;
M=gsl_矩阵_calloc(3,尺寸2);
const gsl_rng_类型*T;
gsl_rng*r;
gsl_rng_env_setup();
T=gsl\u rng\u默认值;
r=gsl_rng_alloc(T);

对于(uint16_t k=0;k)”,我尝试在双for循环中使用该函数填充矩阵,但对于我预期的应用程序来说速度非常慢--让我们看看代码!这是令人尴尬的并行。唯一重要的部分是为每个核心分配一个gsl_rng结构实例。@AGS:你可以在上面的编辑中检查@ViniciusMiranda:你完全正确!我怎么连并行化都没想过?!但是,我不知道如何在不同的线程或C之间拆分C代码如果有人能给我看一些例子或者给我指一些有用的关于C语言并行编码的链接/教程,我会非常感激:)你能找到一个很好的讨论