我试图模拟类似马尔可夫链的东西,用discrete_distribution来模拟状态s_i到s_j的变化,但当然,这是一个矩阵,而不是向量。所以我试着。
std::vector <uint16_t> v {{...},
{...},
...
{...},};
std::vector <std::discrete_distribution <uint16_t> > distr(n, std::distribution <uint16_t> (v.begin(), v.end()) );但这不管用。
注意:如果我只尝试一个向量,这就是uint16_t works的向量。
// CHANGE v by v[0]
std::vector<std::discrete_distribution <uint64_t>> distr(1, std::discrete_distribution <uint64_t> (vecs[0].begin(), vecs[0].end()));基于这个answer
我知道
std::vector <std::discrete_distribution <uint16_t> > distr(n, std::distribution <uint16_t> (v.begin(), v.end()) );是不正确的,但我提到将v1改为v,以证明使用离散分布向量是可能的。
发布于 2017-12-28 20:21:38
可以使用列表初始化来初始化嵌套向量。例如:
std::vector<std::vector<int>> v{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};发布于 2018-02-12 06:16:16
我找到了一种类似于这个answer的方法
使用此模板
template<typename T>
void set_distributions(std::vector< std::discrete_distribution <T> > &distr, const std::vector< std::vector<T> > &vecs){
for (uint64_t i = 0; i < vecs.size(); ++i) {
distr.push_back( std::discrete_distribution <uint64_t> (vecs[i].begin(), vecs[i].end()) );
}
}使用这个函数,当您清空了分布的向量时
std::vector<std::discrete_distribution <uint64_t>> distr;
set_distributions(distr, vecs);https://stackoverflow.com/questions/48013802
复制相似问题