特征矩阵库用给定范围内的随机浮点值填充矩阵

新手上路,请多包涵

Eigen 矩阵库中的 setRandom 函数用 [-1,1] 范围内的随机数填充给定矩阵。如何扩展它以生成任何给定范围内的数字?我需要浮点数,我可以接受伪随机性。

我尝试过执行以下操作:

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

这里 A 是有问题的矩阵, [LO,HI] 是我要填充的范围。问题是 RAND_MAX 的值对我来说是 2147483647 ,这弄乱了整个计算。

任何帮助深表感谢。

原文由 pincir 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 513
1 个回答

这可能会有所帮助:

 #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 范围内的 double 类型的伪随机元素。

原文由 RHertel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题