我想在空间中生成随机离散值向量。简单的例子如下;一个立方体。在这种情况下,矢量的每个系数必须在两个值之间,因此它在多维立方体内。这个立方体可以通过它的两个角点(存储在点[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
}
此代码运行正常。然而,现在不是一个立方体,我必须在两个立方体的差异内生成一个向量。所以我们有大立方体的两个角点,大立方体内的一个点与大立方体的顶部或底部角落相结合,诱导了一个立方体,我不希望这个矢量位于其中。
我的第一直觉是像以前一样生成向量,然后过滤出小立方体中的向量。然而,如果小立方体相当大,那么生成我想要的试验数量将花费太多时间。这里有人有想法吗?
答案 0 :(得分:0)
我认为首先你需要定义第三点是什么,即:说你的初始立方体是(点[0],点[1]),第三点是点[2]。是否要在(点[0],点[1])和(点[0],点[2])之间或(点[0],点[1])和(点[0],点[1])之间的差异中进行采样(点[2],点[1])?
因此,我会将电话号码uniform_int_distribution<>(point[0].at(i),points[1].at(i)))
更改为uniform_int_distribution<>(point[2].at(i),points[1].at(i)))
或uniform_int_distribution<>(point[0].at(i),points[2].at(i)))
。