Julia 如何使用“断开两个循环”?

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

我写了一个函数,它生成一个离散的随机变量并返回两个索引。似乎我的代码是错误的,因为返回的第一个索引总是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
函数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