2016-07-13 22 views
0

我有一個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的最佳方式?可以在不復制載體的情況下完成,也不需要自己寫樣本器?

回答

1

你可以使用指針Eigen::VectorXd

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

這不會導致數據被複制嗎? – Flash

+0

哪些數據?權重?沒有。 – kangshiyin