Как выбрать массив из гамма-распределения со значениями формы, заданными другим массивом в Julia?

#arrays #random #julia #gamma-distribution

Вопрос:

В Julia у меня есть массив значений формы, и я хотел бы выбрать массив, значения которого распределены по гамме в соответствии с соответствующим элементом формы моего массива фигур. Чего я хочу, так это:

     shapes = [1.1, 0.5, 10]  
    scale = 1  
    x = SampleGammaWithDifferentShapes(shapes,scale)
 

где x[1] отбирается выборка из гамма-распределения с формой= shapes[1] , и x[2] отбирается выборка из гамма-распределения с формой= shape[2] и так далее.

Есть ли встроенная функция, которая позволяет вам делать это в одной строке, или мне придется определить для этого свою собственную функцию? Похоже, это должна быть встроенная функция.

Ответ №1:

Возможность просто транслировать любую функцию по массивам делает ненужным добавление специальных версий функций в массивах. Можете ли вы сделать это за 1 значение? Затем просто транслируйте.

 using Distributions

shapes = [1.1, 0.5, 10.]
scale = 1
x = rand.(Gamma.(shapes, scale))
 

Комментарии:

1. Это ожидаемо. Для каждой фигуры вы вызываете rand(g, 2) и получаете массив с 2 случайными значениями, а затем транслируете эту операцию по всем фигурам. Если вы хотите сгладить это, вы можете использовать vcat(x...) или collect(Iterators.flatten(x)) . (Правка: последующий комментарий не удался, и теперь я выгляжу глупо)

2. Микаэль, приношу свои извинения. Я сразу понял свою ошибку и сразу же удалил комментарий.

Ответ №2:

Для этого полезна функция карты.

 using Random, Distributions

shapes = [1.1, 0.5, 10]  
scale = 1
n_samples = 1
x = map(x -> rand(Gamma(x,scale), n_samples)[1], shapes)