У меня есть набор весов в Eigen::VectorXd
и хотел бы получить выборки из диапазона индексов, используя эти значения вероятностей. Если weights
это std::vector
Я могу сделать это:
std::random_device rd;
std::mt19937 rng(rd());
std::discrete_distribution<int> dist(weights.begin(), weights.end());
int val = dist(rng);
Каков наилучший способ сделать это, когда weights
является Eigen::VectorXd
? Можно ли это сделать без копирования вектора и без написания самого сэмплера?
Вы можете использовать указатели для Eigen::VectorXd
std::discrete_distribution<int> dist(weights.data(), weights.data()+weights.size());
Других решений пока нет …