我有一個字典中的鍵串列,我想給每個專案分配一個 0 和 1 之間的數字,使分配的數字之和為 1。我試著用 rand() 來做,但是沒有成功。有什么建議嗎?
uj5u.com熱心網友回復:
你可以生成一個 "概率向量",即一個長度為d的向量,其條目都是非負的,并且總和為1,均勻地隨機生成:
使用Random
rand_probvec(d) = rand_probvec(Random.GLOBAL_RNG, d)
function rand_probvec(rng, d)
unif = rand(rng, d - 1)
T = eltype(unif)
w = zeros(T, d 1)
w[2:d] .= sort(unif)
w[d 1] = one(T)
return diff(w)
結束。
following http://www.cs.cmu.edu/~nasmith/papers/smith tromble.tr04.pdf。
如果你不關心你的分布是否是均勻隨機抽取的,你可以直接抽取d亂數并除以它們的總和,例如:
function rand_probvec2(d)
v = rand(d)
return v / sum(v)
結束。
無論如何,一旦你能生成隨機概率向量,如果你有一個你希望分配概率的元素串列,你可以做一些事情
my_list = ["a"/span>, "b"/span>, "c"/span>]
prob_vec = rand_probvec(length(my_list) )
my_dist = Dict(k => prob_vec[i] for (i, k) in enumerate(my_list)
uj5u.com熱心網友回復:
更多的數學答案是使用Dirichlet分布。 具體來說,一個濃度引數為1.0的對稱Dirichlet在N-simplex上是均勻的:
使用分布。
d = rand(Dirichlet(4, 1.0))
4元素向量{Float64}。
0.1629111431248381
0.025227624238719375
0.030334086399317672
0.7815271462371249
sum(d)
1.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/328612.html
標籤:
上一篇:向串列中添加一行字典的值
