2013-12-11 43 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])。 –