Eigen::unaryExpr 和 const 用于随机数引擎
Eigen::unaryExpr and const for random number engine
我有以下类:
class TestRandom
{
public:
struct scalar_op
{
std::mt19937 rng;
std::normal_distribution<double> norm;
scalar_op(){}
scalar_op(unsigned long seed){rng = std::mt19937(seed);}
void reset(unsigned long seed=std::mt19937::default_seed){ rng142.seed(seed);norm.reset(); }
double operator()(void) const
{
double n_noise =norm(rng);
return n_noise;
}
};
TestRandom(){}
void reset(unsigned long seed=std::mt19937::default_seed){rand.reset(seed);}
/// Draw nn samples from the gaussian and return them
Eigen::MatrixXd samples(int n)
{
Eigen::MatrixXd noise(3,n);
noise.unaryExpr(rand);
return corr_noise;
}
private:
scalar_op rand;
}; //TestRandom
我试图实现的是首先将随机数生成器重置为
TestRandom r1;
r1.reset(1)
然后用随机样本填充矩阵,如
Eigen::MatrixXd normal_random = r1.samples(1); // just a sample of random numbers
但是我得到一个编译错误
error C3848: expression having type 'const std::mt19937' would lose some const-volatile qualifiers in order to call 'unsigned int std::mersenne_twister<_Ty,_Wx,_Nx,_Mx,_Rx,_Px,_Ux,_Sx,_Bx,_Tx,_Cx,_Lx>::operator ()(void)
如果我删除 () 运算符的 const,代码会编译,但 operator() 中的计算不会执行(我可以在调试器中看到这一点)。
指出我的错误并可能提供解决此问题的方法会非常友善。提前致谢
rng
属性应该声明mutable
,例如:
mutable std::mt19937 rng;
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 整数不会重复超过随机数
- 当使用带有VS2019或VSCode的虚幻引擎4.24.2时,我如何修复这些错误的Intellisense错误
- Unity在虚幻引擎4中的"Vector3.Slerp"等效C++?
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- if数组上的随机数
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 在虚幻引擎中删除NXOpen对象时崩溃
- 半随机数生成C++
- 程序在尝试猜测它选择的随机数时进入无限循环?
- <random>在实践中应该实际使用哪个随机数引擎? std::mt19937?
- 如何为GSL(GNU科学库)调整C++式随机数引擎?
- 哪些C++随机数引擎具有 O(1) 丢弃功能
- C 11多个随机数引擎适配器
- Eigen::unaryExpr 和 const 用于随机数引擎
- 如何重置随机数引擎
- 指定的随机分布使用哪种类型的随机数引擎
- 当你复制一个随机数引擎和随机数分布时会发生什么?
- 用相同的引擎并行生成随机数是失败的
- 从多个线程访问随机数引擎