I need to generate normal random floats in range [0;1], but randn(Float64) uses a different range.
How to fix it?
I need to generate normal random floats in range [0;1], but randn(Float64) uses a different range.
How to fix it?
The normal distribution has infinite support (in theory). randn
samples a normal distribution with variance 1
and mean 0
(so most values are in [-1, 1]
and very few values are outside [-5, 5]
). If you want to reshape this, you can always add and multiply: almost all outputs of randn()/5 + 0.5
will be in your suggested range.
In the normal distribution, most values are within [-0.6744897501960818, 0.6744897501960818]…
If you sample from a distribution but throw away any values outside a range, you effectively sample a truncated distribution. I must emphasize that a truncated distribution is not the same as the original distribution, but it’s what you use if you really need a strict range. Distributions.jl supports truncation of univariate distributions, and you use rand
to sample. As @gustaphe said, you could truncate to [-a, a] and adjust the values to the range [0, 1], or you could also adjust the mean and variance of the Normal
distribution before you truncate it to [0, 1].
Both statements are true .
I normally go by the 68-95-99.7 rule, but I never remember the specific numbers so I call it “most”, “almost all”, “pretty much all”.