我知道像gsl这样的库可以生成高斯分布和基于高斯分布产生随机数,节点/-Gauss-Distribution.html我想知道是否有任何库可以产生服从混合高斯分布的随机数,并且可以根据混合高斯分布返回给定值的概率?非常感谢。

后续:如果我首先在(0,1)之间生成一个随机数,如果它属于(0,0.5),我只生成服从一个高斯分布的数字,否则就从另一个高斯分布生成数字,这是否相同。这个过程是否与生成数服从两个高斯混合的过程相同?(假设两个高斯之间的权重相等)
发布于 2016-05-19 16:03:25
您是正确的:您可以从高斯混合模型中分两步生成一个样本:
下面是一个使用C++内置随机数生成器的最小工作示例:
#include <iostream>
#include <random>
#include <array>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
using normal_dist = std::normal_distribution<>;
using discrete_dist = std::discrete_distribution<std::size_t>;
auto G = std::array<normal_dist, 3>{
normal_dist{5.0, 0.1}, // mean, stddev of G[0]
normal_dist{8.0, 0.4}, // mean, stddev of G[1]
normal_dist{2.0, 0.3} // mean, stddev of G[2]
};
auto w = discrete_dist{
0.1, // weight of G[0]
0.6, // weight of G[1]
0.3 // weight of G[2]
};
for (int n = 0; n < 100; ++n) {
// Create one sample of the Gaussian mixture model
auto index = w(gen);
auto sample = G[index](gen);
std::cout << sample << " ";
}
std::cout << '\n';
}在这里试试。
https://stackoverflow.com/questions/37320025
复制相似问题