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

Getting a random float value in [-1, 1] in Julia

p = rand(-1.:eps():1., 100000)

在 [-1, 1] 中获取随机浮点值的好方法?

一个常见的建议似乎是 2. * rand(100000) - 1.,但是 (a) 这永远不会 return 1 因为 rand 的范围是 [0, 1),( b) 这会跳过很多值:为了论证的缘故,假设 eps() == 0.1,然后 rand returns 来自 (0.1, 0.2, 0.3, ..., 0.9),以及在这个计算之后你得到的结果来自 (-0.8, -0.6, -0.4, ..., 0.8),所以结果在范围内不再是均匀随机的。

(注意:性能方面,我在顶部的版本似乎比后者慢 4 倍。)

在给定范围内获得均匀随机浮点数的一般推荐方法是什么?

使用 Distributions.jl 包在 (-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

你也可以采样不同形状的matrices/vectors:

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