gpt4 book ai didi

c++ - 使用 和函数生成随机双 vector

转载 作者:搜寻专家 更新时间:2023-10-31 00:14:47 30 4
gpt4 key购买 nike

我编写了以下函数来生成 double 的随机 vector :

void getrands(vector<double> *x)
{
int N=(*x).size();
uniform_real_distribution<double> unif(0.0,1.0);
mt19937 re(time(NULL));
auto generator = bind(unif,re);
generate_n((*x).begin(),N,generator);
}

在我的 main() 程序中,如果我尝试在多个 vector 上调用此函数(比如我想生成 10 个随机 vector ),我最终会得到所有 vector 都具有相同随机数的结果,因为没有足够的时间过去了,得到了一个很好的重新种子。什么是更好的方法来做到这一点?我应该创建一个随机数组然后将其转换为 vector 吗?我习惯了 matlab,在那里我可以调用 X=rand(n,m)...

谢谢!

最佳答案

更好的方法是使用 std::random_device 为您的随机数生成器播种.

mt19937 re(std::random_device{}());

而且您可能应该将 RNG 作为参数传递给函数,而不是每次迭代都创建一个新实例。

此外,请注意 std::bind 会复制其参数,因此您可能希望在将 RNG 作为参数传递给绑定(bind)


我会将你的函数重写为

template<typename Generator>
void getrands(vector<double>& x, Generator& gen, unsigned num)
{
generate_n(std::back_inserter(x), num, std::ref(gen));
}

并称它为

uniform_real_distribution<double> unif(0.0,1.0);
mt19937 re(std::random_device{}());
auto generator = bind(unif, std::ref(re));

vector<double> vs;

getrands(vs, generator, 10);

这允许您重复使用相同的 RNG,您无需在调用函数之前将 vector 设置为正确的大小,并且可以根据需要向 vector 添加值。

Live demo

关于c++ - 使用 <random> 和函数生成随机双 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21695073/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com