内部和外部函数之间的循环

时间:2019-02-01 11:26:16

标签: julia

我已经对此进行了一段时间的尝试,但似乎无法得出结论。如果我有以下选择,

function fxn1()
    for i in 1:N
        do_something()
    end
end

function main()
    fxn1()
end

function fxn2()
    do_something()
end

function main()
    for i in 1:N
        fxn2()
    end
end

是否有首选的共识?我一直在玩@time,并且得到了不同的结果。

令我惊讶的是第二个选项的执行速度更快,因为我希望额外的子例程/函数调用会使代码更昂贵。我关注内存分配,在我进行的每个实验中,两种情况下的内存分配几乎相同,即使这样,也不一定越快。

感谢您的任何输入!

1 个答案:

答案 0 :(得分:3)

因此,鉴于MWE,很难回答。我的意思是为什么您还要拥有函数fxn2()? 但是一般来说,在Julia中,您通常更喜欢在单个元素上定义一个函数,然后遍历该元素以应用它。这与julia的广播语义非常吻合(例如,参见https://docs.julialang.org/en/v1/manual/functions/#man-vectorized-1

因此,例如,如果要在Julia中采用数字数组的sin e,则可以执行y = sin.(x),与

相同
y = Vector{Float64}(undef, length(x))
for i in eachindex(x)
   y[i] = sin(x[i])
end