gpt4 book ai didi

loops - Julia for 循环中的迭代索引

转载 作者:行者123 更新时间:2023-12-04 16:42:28 25 4
gpt4 key购买 nike

我必须在 Julia 中编写一个非常简单的 for 循环,我在下面重现:

result=fill([],6,1)
E=rand(5,5)
D=3.27
k=2
for s in [0.5,0.75,1,1.25,1.5,2]
result[??]=exp.(-(E.^2/D)/(2*s*k))
end

在每次迭代中,我希望 result 的第 i 元素填充函数的结果,该函数使用 i-数组的第一个元素[0.5,0.75,1,1.25,1.5,2]。所以我不知道在括号 [??] 内放什么。到目前为止,我试过了

for (index, value) in enumerate([0.5,0.75,1,1.25,1.5,2])
result["$index"]=exp.(-(E.^2/D)/(2* "$value" *k))
end

但它不起作用。有什么提示吗?

最佳答案

您当前正在将结果初始化为一维数组,但它们实际上是二维的。所以需要如下切换结果

result = fill(Array{Float64}(undef,0,0),6,1)

您不需要对类型进行任何转换,以下操作即可。

for (index, value) in enumerate([0.5,0.75,1,1.25,1.5,2])
result[index]=exp.(-(E.^2/D)/(2*value*k))
end

除了初始化结果之外,您还可以映射这些值,这样会更容易阅读。

result = map(x -> exp.(-(E.^2/D)/(2*x*k)), [0.5, 0.75, 1, 1.25, 1.5, 2])

对性能的一些评论

using BenchmarkTools

function t1()
result=fill(Array{Float64}(undef,0,0),6,1)
E=rand(5,5)
D=3.27
k=2
for (index, value) in enumerate([0.5,0.75,1,1.25,1.5,2])
result[index]=exp.(-(E.^2/D)/(2*value*k))
end
end

function t2()
E=rand(5,5)
D=3.27
k=2
result = map(x -> exp.(-(E.^2/D)/(2*x*k)), [0.5, 0.75, 1, 1.25, 1.5, 2])
end

@btime t1() # 4.904 μs (49 allocations: 9.66 KiB)
@btime t2() # 4.812 μs (50 allocations: 9.64 KiB)

如您所见,性能没有真正的差异。如果您想提高性能,那么尝试将常量从内部循环中拉出是最简单的方法。

function t3()
E=rand(5,5)
D=3.27
k=2
f = -(E.^2/D)/(2*k)
result = map(x -> exp.(f/x), [0.5, 0.75, 1, 1.25, 1.5, 2])
end

@btime t3() # 3.168 μs (31 allocations: 5.53 KiB)

关于loops - Julia for 循环中的迭代索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com