我想在空间中生成随机离散值向量。简单的例子如下:一个立方体。在这种情况下,矢量的每个系数必须位于两个值之间,以便它位于多维立方体内部。这个立方体可以用它的两个角点来描述(存储在点[0]和点[1]中)。我用C++(11)编程如下:在立方体空间差异中生成离散向量
random_device rd;
mt19937 eng(rd());
vector<uniform_int_distribution<>> distr;
for(int i = 0; i< points[0].size();i++){
distr.push_back(uniform_int_distribution<>(point[0].at(i),points[1].at(i)));
}
for(int i = 0;i<trials;i++){
vector<unsigned> draw;
for(int j = 0; j< points[0].size();j++){
draw.push_back(distr.at(j)(eng));
}
// Do stuff with vector
}
此代码运行良好。然而现在不是立方体,我必须在两个立方体的差别内生成一个向量。所以我们有大立方体的两个角点,大立方体内的一个点与大立方体的顶部或底部角落相结合,产生了一个我不想让矢量躺下的立方体。
我的第一本能是像以前一样生成矢量,然后过滤掉那些小立方体中的矢量。但是,如果小立方体相当大,那么需要花费太多时间来生成我想要的试验量。这里有人有想法吗?
你有没有试过要花多少时间?我知道这样的“冲洗,重做和重复”东西可能是可怕的,但如果这不是性能关键的一部分... –
不,我会执行它并检查返回 –
有[分段不变的分布](http: //en.cppreference.com/w/cpp/numeric/random/piecewise_constant_distribution);不幸的是,它是针对浮点值的。也许为整数创建分段统一分布并不难? – dyp