使用特征向量中的权重从离散分布中抽取样本

Sample from discrete distribution using weights in Eigen Vector

我在 Eigen::VectorXd 中有一组权重,我想使用这些值作为概率从指数范围中抽取样本。如果 weightsstd::vector 我可以这样做:

std::random_device rd;
std::mt19937 rng(rd());
std::discrete_distribution<int> dist(weights.begin(), weights.end());
int val = dist(rng);

weightsEigen::VectorXd 时,最好的方法是什么?不复制vector,不自己写sampler,能做到吗?

您可以使用指针 Eigen::VectorXd

std::discrete_distribution<int> dist(weights.data(), weights.data()+weights.size());