如何自定义设置随机的范围?

How to customize range of setRandom?

本文关键字:范围 随机 设置 自定义      更新时间:2023-10-16

Eigen提供了使用矩阵和向量(其中一维为1(的工具。我正在尝试开发一个函数,该函数用setRandom产生的随机数填充向量(double *array(。

double *gen_random(int size, double min, double max) {
double *array = new double[size * sizeof(double)];
Matrix<double, Dynamic, Dynamic, RowMajor>::Map(array, size, 1).setRandom();
return array;
}

上面的代码这样做,但根据 https://eigen.tuxfamily.org/dox/classEigen_1_1PlainObjectBase.html#title35,随机范围为 [-1:1]。

如何将范围更改为即 [0:99]?

到目前为止,答案和评论似乎建议添加一个循环以获得所需的结果,例如:

double *gen_random(int size, double min, double max) {
double *array = new double[size * sizeof(double)];
Matrix<double, Dynamic, Dynamic, RowMajor>::Map(array, size, 1).setRandom();
for (int i = 0; i < size; ++i)
array[i] = (array[i]+1)*50;
return array;
}

这是一个完整的单行解决方案:

double *gen_random(int size, double min, double max) {
double *array = new double[size * sizeof(double)];
ArrayXd::Map(array,size) = (ArrayXd::Random(size)+1.)*0.5*(max-min) + min;
return array;
}

我正在使用Array而不是线性代数VectorMatrix来启用标量加法。

正如评论中所建议的,您可能应该只执行算术以使您的随机值进入所需的范围(即+1,然后* 50(。无论如何,这基本上就是不同请求范围会发生什么。