我想在空間中生成隨機離散值向量。簡單的例子如下:一個立方體。在這種情況下,矢量的每個係數必須位於兩個值之間,以便它位於多維立方體內部。這個立方體可以用它的兩個角點來描述(存儲在點[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