草庐IT

Distribution

全部标签

c++ - std::mt19937 和 std::uniform_real_distribution 每次都返回边界值

好的,所以我有一些RNG代码(当一切都说完了)归结为:#include#include#include#includedoublerandomValue(){//SeedaMersenneTwister(goodRNG)withthecurrentsystemtimestd::mt19937generator(std::chrono::system_clock::now().time_since_epoch().count());std::uniform_real_distributiondist(std::numeric_limits::lowest(),std::numeric_l

c++ - 无法在 lambda 中按值捕获随机分布和生成器?

下面的代码可以正常工作#include#includeintmain(){std::default_random_enginegenerator;std::normal_distributiondistribution(5.0,2.0);std::vectorv(100);std::generate(v.begin(),v.end(),[&](){returndistribution(generator);});return0;}但是,将lambda的捕获列表更改为[=]或[&,distribution]或[&,generator]会导致rand.cpp:9:59:error:noma

c++ - boost 随机和 OpenMP

我从代码的OpenMP并行部分收到“总线错误”。我在下面重新创建了一个简单版本的问题。该代码实质上对函数uniform_distribution进行了多次调用。,它使用Boost的uniform_int_distribution绘制一个0到20000之间的整数。这post警告两个线程访问同一个对象。我猜那是eng就我而言。(不幸的是,我不知道如何编写“合适的互斥包装器”,正如该帖子所建议的那样)。我想到的一个可能的肮脏解决方案是创建一个本地eng在#pragmafor里面循环并将其作为参数传递给uniform_distribution.我不喜欢这个想法,因为在我的真实代码中,我调用了很

C++11 std::generate 和 std::uniform_real_distribution 调用两次给出了奇怪的结果

在不同的容器上从STL调用std::generate算法两次产生相同的结果。假设我想用-1之间的随机数填充两个float组。和1.:std::arrayx;std::arrayy;std::random_devicerd;std::mt19937_64gen(rd());std::uniform_real_distributiondis(-1.f,1.f);autorand=std::bind(dis,gen);std::generate(x.begin(),x.end(),rand);std::generate(y.begin(),y.end(),rand);您可以在这里进行测试:h

c++ - 如何 std::bind() 创建数据成员?

我正在使用C++11不错的新生成器和分布生成随机值。在一个函数中,它就像一个魅力,看起来像这样:voidfoo(){mt19937generator;uniform_int_distributiondistribution;autodice=bind(distribution,generator);//dice()willnowgivearandomunsignedvalue}但是如何将所有三个对象作为数据成员放入一个类中呢?我可以简单地将generator和distribution编写为数据成员,但是如何在不知道(或不想知道)它的情况下使dice成为数据成员确切类型?令人惊讶的是cl

c++ - 如何设置 "discrete_distribution"c++的 vector

我正在尝试模拟类似马尔可夫链的东西并使用discrete_distribution来模拟状态s_i到s_j的变化。但当然,这是一个矩阵,而不是vector。所以我试试。std::vectorv{{...},{...},...{...},};std::vector>distr(n,std::distribution(v.begin(),v.end()));但这行不通。注意:如果我只尝试1个vector,这是uint16_t作品的vector//CHANGEvbyv[0]std::vector>distr(1,std::discrete_distribution(vecs[0].begin

c++ - 并发随机数生成

我正在使用openmp编写一个并行程序,在其中我生成一个随机float矩阵,然后对其进行一些计算。我目前想让生成矩阵的步骤并行运行,但我遇到了rand()函数不打算同时运行的问题。我不想使用锁在rand上提供互斥锁,因为这是循环中唯一要做的事情,顺序运行它可能会更有效率。有什么方法可以并行高效地执行此步骤?这里是这部分的当前代码(rand上没有互斥锁);#pragmaompparalleldefault(private){inti=omp_get_thread_num();for(intj=0;j 最佳答案 如果您使用的是C++,则

c++11 STL 的 binomial_distribution 极慢

我正在使用STL的“随机”生成二项式分布的随机数。当范围很大时,它变得非常慢。对于范围40,生成100个数字需要12秒。对于更大的范围,时间会急剧增加(我需要10000左右的范围)。它似乎不依赖于概率参数。我正在使用g++4.5.0。#include#includeusingnamespacestd;vectorv;default_random_enginegen(123);binomial_distributionrbin(40,0.7);intmain(){v.reserve(2000);for(inti=0;i输出:50.~/.../fs/>g++-std=c++0xq.cpp5

C++ 线程安全的均匀分布随机数生成

我有一个循环。在循环内部,在每次迭代中,我需要从U[0,1]中提取一个数字。如何使用openmp,并且保证随机数生成过程不被污染?有人建议我需要一个线程安全的随机数生成器,这可能是也可能不是我的问题的解决方案。我的问题与另一个问题非常相关,但我想从连续统U[0,1]中得出一些细微差别。另外,我不知道如何通过线程播种生成器,有人可以写一行代码吗? 最佳答案 基于已经mentionedsolution,这里有一个适合您特定需求的版本:doubledoubleRand(doublemin,doublemax){thread_localst

c++ - C++中作为类成员的分布

我有两个关于在类内使用分布的相关问题。C++中是否有某种基本分布以便在不知道它是哪个分布的情况下将分布用作类成员?我不能使用模板(参见问题2)classFoo{private://couldbyanydistributionstd::base_distributiondist_;};我还有一个类(class)Bar应该有一个vectorFoo作为私有(private)成员(std::vector)。问题是如果Foo使用模板,那么不可能有一个由不同模板参数组成的vector,而这正是我想要的。classBar{private:std::vectorfoo_;};boost::varian