如何自定义设置随机的范围?
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;
}
这是一个完整的单行解决方案:
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
来启用标量加法。
正如评论中所建议的,您可能应该只执行算术以使您的随机值进入所需的范围(即+1
,然后* 50
(。无论如何,这基本上就是不同请求范围会发生什么。
相关文章:
- 如何使用按位运算将随机uint64_t转换为范围 (0, 1) 的随机双精度
- 如何自定义设置随机的范围?
- 随机选择 2 个不在范围内的整数
- 随机整数仍在生成低于或高于范围的数字?
- 范围 - v3 中的随机播放操作
- 有没有有效的方法可以从现在开始生成从范围到 10 天的随机date_time
- C 使用单个生成器从多个范围内提升随机INT
- 编写一个程序,该程序在0-99范围内生成10000个随机整数,并从随机数据中产生直方图
- C++随机访问迭代器超出范围
- 需要在指定范围内生成一个随机整数
- MFC对话框成员变量的随机崩溃不在范围中
- 特征矩阵库在给定范围内用随机浮点值填充矩阵
- 在多次迭代中创建随机大小(在特定范围内)的数组
- 在数组中随机生成固定范围的数字,在该 2D 数组中没有重复行
- 在C++中实现随机预言机(输出在范围内是随机的,但对于相同的输入输出是相同的)
- 从用户输入的范围中为不同的类创建不同的随机x,y值
- 如何用范围内的随机值填充数组?(可以复制.)
- 为什么标准不允许 std::for_each 对无效的随机访问迭代器范围有明确定义的行为?
- 这是从容器中获取随机元素的OK范围的方法吗
- 在不同范围内生成随机双精度