我编写了一个函数,该函数生成一个离散的随机变量并返回两个索引。似乎我的代码是错误的,因为返回的第一个索引始终为4。这是我的代码:
function inds(arr::Array{Float64, 2})
probs = arr/sum(arr)
u = rand()
sum_prob = 0.0
local ii, jj
for i=1:size(arr)[1]
for j=1:size(arr)[2]
if sum_prob <= u < sum_prob + probs[i,j]
ii = i
jj = j
break
else
sum_prob += probs[i,j]
end
end
end
return (ii, jj, probs[ii,jj])
end
最有可能的是,您确实需要打破这两个循环。执行此操作的标准方法是使用布尔值标志从两个循环中退出,例如:
function inds(arr::Array{Float64, 2})
is_done = false
probs = arr/sum(arr)
u = rand()
sum_prob = 0.0
local ii, jj
for i=1:size(arr)[1]
for j=1:size(arr)[2]
if sum_prob <= u < sum_prob + probs[i,j]
ii = i
jj = j
is_done = true
break
else
sum_prob += probs[i,j]
end
end
if is_done:
break
end
end
return (ii, jj, probs[ii,jj])
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句