Julia 如何使用“断开两个循环”?
我写了一个函数,它生成一个离散的随机变量并返回两个索引。似乎我的代码是错误的,因为返回的第一个索引总是4。这是我的密码:Julia 如何使用“断开两个循环”?,julia,Julia,我写了一个函数,它生成一个离散的随机变量并返回两个索引。似乎我的代码是错误的,因为返回的第一个索引总是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_pr
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
函数inds(arr::Array{Float64,2})
probs=arr/总和(arr)
u=rand()
总和概率=0.0
本地二级,jj
对于i=1:尺寸(arr)[1]
对于j=1:尺寸(arr)[2]
如果sum_prob最有可能,您确实需要从两个循环中中断。 执行此操作的标准方法是使用布尔标志从两个循环中退出,例如:
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
函数inds(arr::Array{Float64,2})
完成了吗
probs=arr/总和(arr)
u=rand()
总和概率=0.0
本地二级,jj
对于i=1:尺寸(arr)[1]
对于j=1:尺寸(arr)[2]
在这种特殊情况下,如果sum_prob,因为两个循环可以组合成一个多迭代器循环,那么如果这样做,您可以将它们都打断:
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), 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
return (ii, jj, probs[ii,jj])
end
函数inds(arr::Array{Float64,2})
probs=arr/总和(arr)
u=rand()
总和概率=0.0
本地二级,jj
对于i=1:size(arr,1),j=1:size(arr,2)
如果是sum_prob
function inds(arr::Array{Float64, 2})
probs = arr/sum(arr)
u = rand()
sum_prob = 0.0
local ii, jj
for j=1:size(arr,2), i=1:size(arr,1)
if sum_prob <= u < sum_prob + probs[i,j]
ii = i
jj = j
break
else
sum_prob += probs[i,j]
end
end
return (ii, jj, probs[ii,jj])
end