Создание матрицы розыгрышей из вектора распределений - PullRequest
1 голос
/ 27 июня 2019

У меня есть вектор n распределений, и я пытаюсь создать n x t матрицу t отрисовок из каждого из n распределений.

using Distributions

d = [Uniform(0,1), Uniform(1,2), Uniform(3,4)]
r = [rand(i, 2) for i in d] # Want a 3x2 matrix, but get an array of arrays

Ожидаемый:

[0.674744 0.781853; 1.70171 1.56444; 3.65103 3.76522]

Фактический:

[[0.674744, 0.781853], [1.70171, 1.56444], [3.65103, 3.76522]]

1 Ответ

2 голосов
/ 27 июня 2019

Попробуйте двойное индексирование понимания:

julia> using Distributions

julia> d = [Uniform(0,1), Uniform(1,2), Uniform(3,4)]
3-element Array{Uniform{Float64},1}:
 Uniform{Float64}(a=0.0, b=1.0)
 Uniform{Float64}(a=1.0, b=2.0)
 Uniform{Float64}(a=3.0, b=4.0)

julia> r = [rand(i) for i in d, _ in 1:2]
3×2 Array{Float64,2}:
 0.687725  0.433771
 1.28782   1.00533
 3.37017   3.88304

Еще одним интересным вариантом является использование вещания:

julia> out = Matrix{Float64}(undef, 3, 2)
3×2 Array{Float64,2}:
 1.0735e-313   7.30082e-316
 7.30082e-316  7.30082e-316
 7.30082e-316  6.11918e-316

julia> out .= rand.(d)
3×2 Array{Float64,2}:
 0.803554  0.457955
 1.4354    1.41107
 3.31749   3.2684

Это короче и может быть полезно, если вам нужно многократно выполнять выборку и вы хотите выполнить операцию на месте (что часто имеет место при имитационном моделировании).

...