Используйте функцию sample
из StatsBase.jl с аргументом Weights
:
julia> using StatsBase
julia> sample([true, false], Weights([0.8, 0.2]), 10)
10-element Array{Bool,1}:
1
0
1
1
1
1
1
1
1
1
И чтобы убедиться, что вы получите то, что хотели, вы можете написать:
julia> countmap(sample([true, false], Weights([0.8, 0.2]), 10^8))
Dict{Bool,Int64} with 2 entries:
false => 20003766
true => 79996234
(конечно, ваши точные числа будут отличаться)
Также, если вам конкретно нужна двоичная выборка, вы можете использовать Bernoulli
распределение из Distributions.jl:
julia> using Distributions
julia> rand(Bernoulli(0.8), 10)
10-element Array{Bool,1}:
0
1
1
0
1
1
1
1
1
1
julia> countmap(rand(Bernoulli(0.8), 10^8))
Dict{Bool,Int64} with 2 entries:
false => 20005900
true => 79994100
(вы можете ожидать, что этот метод Быстрее)
Наконец - если вы не хотите использовать какие-либо пакеты и вам нужен двоичный результат, вы можете просто написать rand(10) .< 0.8
, и снова - вы получите то, что хотели:
julia> countmap(rand(10^8) .< 0.8)
Dict{Bool,Int64} with 2 entries:
false => 20003950
true => 79996050