julia - 如何在两个for循环中使用break?

标签 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_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})
    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

请注意,由于数组在 Julia 中是列优先的——就像 Fortran 和 Matlab,但与 C 不同——它可能更快地切换循环顺序,如下所示:
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

关于julia - 如何在两个for循环中使用break?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59738480/

相关文章:

julia - 如何使用julia的PackageCompiler搭建PlotStats的快速启动环境?

julia - 以编程方式将参数传递给 @kwdef 结构

Julia 语言 : is there a t-test?

julia - 导入一个模块并在 julialang 中使用它

Julia:尝试添加 slider 时出现 "Plot not defined"

matplotlib - Julia:如何保存图形而不在 PyPlot 中绘制/显示图形?

dictionary - 生成包含范围的字典的所有组合

julia - 避免在 Julia 中广播争论

julia - 如何编译特定版本的 Julia

julia - LoadError: MethodError: 没有方法匹配 mod(::VariableRef,::Float64)