2016-03-06 55 views
2

特征矩阵库中的setRandom函数用范围[-1,1]中的随机数填充给定矩阵。我怎样才能扩展这个在任何给定的范围内生成数字?我需要浮点数,我对伪随机性很满意。特征矩阵库用给定范围内的随机浮点值填充矩阵

我曾尝试做如下:

B = LO + A.cast<double>().array()/(static_cast <double>(RAND_MAX)/(HI-LO)); 

这里是有问题的矩阵和[LO,HI]的范围内我期待填补它的问题是,RAND_MAX的值。对我来说是2147483647,这就搞乱了整个计算。

任何帮助,非常感谢。

回答

2

这可能有助于:

#include <iostream> 
#include <Eigen/Dense> 
using namespace Eigen; 
using namespace std; 
int main() 
{ 
    double HI = 12345.67; // set HI and LO according to your problem. 
    double LO = 879.01; 
    double range= HI-LO; 
    MatrixXd m = MatrixXd::Random(3,3); // 3x3 Matrix filled with random numbers between (-1,1) 
    m = (m + MatrixXd::Constant(3,3,1.))*range/2.; // add 1 to the matrix to have values between 0 and 2; multiply with range/2 
    m = (m + MatrixXd::Constant(3,3,LO)); //set LO as the lower bound (offset) 
    cout << "m =\n" << m << endl; 
} 

输出:

m = 
10513.2 10034.5 4722.9 
5401.26 11332.6 9688.04 
9858.54 3144.26 4064.16 

所得矩阵将包含在类型和LOHI之间的范围内的双伪随机元素。

+1

谢谢,这工作:) – pincir

+1

一个更简单的一行表达将是:'M = LO +(ArrayXXd ::随机( M,N)* 0.5 + 0.5)*(HI-LO)' – ggael

0

如果您可以使用C++ 11/14,以下工作。

#include <random> 
std::default_random_engine generator; 
std::uniform_real_distribution<double> distribution(0.0,1.0); 
double number = distribution(generator) 

这将生成范围L和R之间的随机浮点数值distribution(L,R)