目前我正在使用以下代码生成随机正常数字:
#include <thrust/random/normal_distribution.h>
#include <thrust/device_vector.h>
#include <random>
using namespace std;
template <typename T>
class genNormal
{
private:
thrust::minstd_rand rng;
thrust::random::normal_distribution<T> dist;
public:
genNormal() :dist(0.0, 1.0){} // default mean=0, st.dev.=1.0
genNormal(T mean, T stdev):dist(mean,stdev){} // specific mean and standard deviation
__host__ __device__
T operator()(uint64_t index)
{
rng.discard(index);
return dist(rng);
}
};
void main() {
thrust::device_vector<double> r1(10);
for (int i=1; i<=5; i++) {
thrust::transform(thrust::make_counting_iterator<int>(0), thrust::make_counting_iterator<int>(10),r1.begin(),genNormal<double>(5.074469, 0.04385328));
cout<<r1[1]<<", ";
}
}
我得到的输出是:
5.0143, 5.0143, 5.0143, 5.0143, 5.0143,
这里的问题是,对于每个循环,我得到完全相同的结果。如果我需要不同的数字怎么办?在C ++ 11中,我可以使用随机设备作为传递给随机引擎的种子。但是,我没有在推力库中找到任何替代品。
任何人都可以帮忙吗?提前谢谢。