#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)