Мне нужно сгенерировать вектор случайного числа, взятый из полиномиального распределения. Поскольку мне нужно сделать это внутри цикла, я хотел бы уменьшить количество выделений. Это мой код:
pop = zeros(100)
p = rand(100)
p /= sum(p)
#imagine the next line inside a for loop
@time pop = rand(Multinomial(100, p)) #test1
@time pop .= rand(Multinomial(100, p)) #test2
Почему test1 — это 2 распределения, а test2 — 4? Есть ли способ сделать это с 0 распределениями?
Заранее спасибо.


Каждая выборка полиномиального распределения Multinomial(n, p) представляет собой n-мерный целочисленный вектор, сумма которого равна n. Итак, этот вектор расположен внутри rand.
Я полагаю, вы хотите использовать rand!, который работает на месте:
julia> m = Multinomial(100, p);
julia> @time rand!(m, pop);
0.000010 seconds
Обратите внимание, что я сначала создаю объект m, так как его создание выделяет ресурсы, поэтому это нужно сделать один раз.