我必須生成一個從多項分布中抽取的亂數向量。由于我需要在回圈中執行此操作,因此我想減少分配次數。這是我的代碼:
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 分配來做到這一點?
提前致謝。
uj5u.com熱心網友回復:
多項分布的每個樣本Multinomial(n, p)都是一個 n 維整數向量,其總和為n。所以這個向量被分配在rand.
我相信你想使用rand!which works in-place:
julia> m = Multinomial(100, p);
julia> @time rand!(m, pop);
0.000010 seconds
請注意,我m首先創建物件,因為它的創建是分配的,所以它應該做一次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524188.html
標籤:表现随机的朱莉娅分配
