是否
p = rand(-1.:eps():1., 100000)
在[-1,1]中获得随机浮点值的好方法?
一个常见的建议似乎是2. * rand(100000) - 1.
,但
- 由于
rand
的范围是[0, 1)
,因此永远不会返回1 - 这跳过了很多值:为了参数的考虑,假设
eps() == 0.1
,然后rand
从(0.1,0.2,0.3,…,0.9)返回,在计算之后,你会从(-0.8,-0.6,-0.4,…,0.8)得到结果,所以结果在这个范围内不再是一致随机的
(注意:就性能而言,我的顶级版本似乎比后者慢4倍。)
在给定范围内获得一致随机浮点数的一般推荐方法是什么?
使用Distributions.jsl包在(-1, 1)
和使用rand
的样本之间创建均匀分布。
julia> using Distributions
julia> rand(Uniform(-1, 1), 10000)
10000-element Vector{Float64}:
0.2497721424626267
...
-0.27818099962886844
如果你不需要向量,只需要一个标量,你可以这样称呼它(感谢@DNF指出这一点):
julia> rand(Uniform(-1,1))
-0.02748614119728021
您也可以对不同形状的矩阵/矢量进行采样:
julia> rand(Uniform(-1, 1), 3, 3)
3×3 Matrix{Float64}:
-0.290787 -0.521785 0.255328
0.621928 -0.775802 -0.0569048
0.987687 0.0298955 -0.100009
请在此处查看Distributions.jsl的文档。