在Julia中获取[-1,1]中的随机浮点值



是否

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的文档。

相关内容

  • 没有找到相关文章

最新更新