2013-12-11 47 views
0

我想在空间中生成随机离散值向量。简单的例子如下:一个立方体。在这种情况下,矢量的每个系数必须位于两个值之间,以便它位于多维立方体内部。这个立方体可以用它的两个角点来描述(存储在点[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

有[分段不变的分布](http: //en.cppreference.com/w/cpp/numeric/random/piecewise_constant_distribution);不幸的是,它是针对浮点值的。也许为整数创建分段统一分布并不难? – dyp

回答

0

我认为首先需要定义第三点是什么,即:说你的初始立方体是(点[0],点[1]),第三点是点[2]。你是否想在(点[0],点[1])和(点[0],点[2])之间或点(点[0],点[1])和(点[2],点[1])?

因此,我会将呼叫更改为ctor 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)))

+0

如果我正确理解你,这是行不通的,因为在多维向量集(由点(0),点(2))引起的(由点(0),点(1))\ setminus引起的与诱导因素不同(点[2],点[1])。 –