首页 > 解决方案 > 如何自定义 setRandom 的范围?

问题描述

Eigen 提供了使用矩阵和向量(其中一维为 1)的工具。我正在尝试开发一个函数,它double *array用由setRandom.

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;
}

上面的代码可以做到这一点,但随机范围是 [-1:1] 根据https://eigen.tuxfamily.org/dox/classEigen_1_1PlainObjectBase.html#title35

如何将范围更改为 ie [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;
}

标签: c++c++11eigeneigen3

解决方案


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


推荐阅读