我已经对此进行了一段时间的尝试,但似乎无法得出结论。如果我有以下选择,
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,并且得到了不同的结果。
令我惊讶的是第二个选项的执行速度更快,因为我希望额外的子例程/函数调用会使代码更昂贵。我关注内存分配,在我进行的每个实验中,两种情况下的内存分配几乎相同,即使这样,也不一定越快。
感谢您的任何输入!
答案 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