gpt4 book ai didi

for-loop - Julia,for循环迭代器增加到零

转载 作者:行者123 更新时间:2023-12-05 09:06:30 25 4
gpt4 key购买 nike

我有一个很好的函数,可以对使用该函数生成的一组随机数求和。

sum(round(Int8, floor(
rand(TruncatedNormal(var1, var2, var3, var4))))
for _ in 1:var5)

大多数时候它工作正常,var5,for 的迭代器loop 是在函数的前面计算的,可以合法地为零。因此,通过从 1 增加到 0 进行迭代是行不通的,并且会引发错误。 Julia 中是否有一个干净的“检查”,它只会为整个函数产生 0 的结果,或者我是否需要返回并将此函数包含在 if 中?语句在运行之前检查 var5 的值,如果 var5<=0 ,产生替代结果(0)?谢谢。 J

最佳答案

当你执行 sum(rand(Int8) for _ in 1:0) 时,你得到错误:

julia> sum(rand(Int8) for x in 1:0)
ERROR: ArgumentError: reducing over an empty collection is not allowed
Stacktrace:
[1] _empty_reduce_error() at ./reduce.jl:299
[2] mapreduce_empty(::Function, ::Base.BottomRF{typeof(Base.add_sum)}, ::Type{T} where T) at ./reduce.jl:342
[3] reduce_empty(::Base.MappingRF{var"#9#10",Base.BottomRF{typeof(Base.add_sum)}}, ::Type{Int64}) at ./reduce.jl:329
[4] reduce_empty_iter at ./reduce.jl:355 [inlined]
[5] reduce_empty_iter at ./reduce.jl:354 [inlined]
[6] foldl_impl at ./reduce.jl:49 [inlined]
[7] mapfoldl_impl at ./reduce.jl:44 [inlined]
[8] #mapfoldl#204 at ./reduce.jl:160 [inlined]
[9] mapfoldl at ./reduce.jl:160 [inlined]
[10] #mapreduce#208 at ./reduce.jl:287 [inlined]
[11] mapreduce at ./reduce.jl:287 [inlined]
[12] sum at ./reduce.jl:494 [inlined]
[13] sum(::Base.Generator{UnitRange{Int64},var"#9#10"}) at ./reduce.jl:511
[14] top-level scope at REPL[6]:1

一个非常简单的解决方法是首先将随机数收集到一个数组中——或者简单地使用推导式而不是生成器:

julia> sum([rand(Int8) for x in 1:0])
0

您也可以使用上面链接的三元表达式来完全避免该问题:

julia> var5 = 0
0

julia> var5 < 1 ? 0 : sum(rand(Int8) for x in 1:var5)
0

julia> var5 = 2
2

julia> var5 < 1 ? 0 : sum(rand(Int8) for x in 1:var5)
49

关于for-loop - Julia,for循环迭代器增加到零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65997134/

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