如何在Julia中生成随机正实数



我想用正实数填充Julia中的数组。但我只找到了如何处理整数或实数(包括负数(的信息。有可能吗?谢谢

您可以使用任何数学公式将[0, 1)范围映射到[0, +inf]:

例如,如果x[0, 1)范围内的随机变量(例如,对于浮点数据类型,使用rand()获得(:

  • tan(x * pi / 2)
  • atanh(x)
  • log(x) ^ 2
  • -log(x) / x ^ p(对于p非负整数,它将改变数字分布(

还有许多其他功能。

当然,这些数字不再是均匀分布的,但这是不可能实现的。

从技术上讲,内置的randexp满足了您的需求:指数分布有正实数作为其支持。不过,你实际得到的数字要低得多。对于半正态分布abs ∘ randn也是如此。(在这两种情况下,您都可以将结果乘以一个大的正数,以增加与您的需求的差异。(

这里有一个有趣的替代方案:你可以生成均匀随机的,并将它们重新解释为浮点(只需将符号始终设置为正(:

julia> bitrand(3*64).chunks
3-element Vector{UInt64}:
0xe7c7c52703987e68
0xc221b9864e7bab7e
0xa45b39faa65b446e
julia> reinterpret(Float64, bitrand(3*64).chunks)
3-element reinterpret(Float64, ::Vector{UInt64}):
2.8135484124856866e-108
-4.521596431965459e53
-5.836451011310255e78
julia> abs.(reinterpret(Float64, bitrand(3*64).chunks))
3-element Vector{Float64}:
1.6467305137006711e236
3.3503597018864875e-260
1.2211675821672628e77
julia> bitstring.(abs.(reinterpret(Float64, bitrand(3*64).chunks)))
3-element Vector{String}:
"0000110000011000001110000110001111010000011110111101000101101101"
"0011000010110101111100111011110100111100011011000101001100010011"
"0110111000001000101011010100011011010010100111111011001000001100"

不过,这仍然不是值的均匀分布,因为指数越大,浮点的精度就越小。

最新更新