如何自定义setRandom的范围?
How to customize range of setRandom?
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;
}
正如评论中所建议的那样,您可能应该只执行算术运算以使随机值进入所需范围(即 +1
,然后是 * 50
)。无论如何,这基本上是不同请求范围会发生的情况。
这是一个完整的单行解决方案:
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
而不是线性代数 Vector
或 Matrix
来启用标量加法。
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;
}
正如评论中所建议的那样,您可能应该只执行算术运算以使随机值进入所需范围(即 +1
,然后是 * 50
)。无论如何,这基本上是不同请求范围会发生的情况。
这是一个完整的单行解决方案:
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
而不是线性代数 Vector
或 Matrix
来启用标量加法。