gpt4 book ai didi

julia - 如何在 Julia 1.0 的数组中用 NaN 替换 Inf 值?

转载 作者:行者123 更新时间:2023-12-01 17:36:09 25 4
gpt4 key购买 nike

我在网上看到了几个地方的解决方案

 a = [1 2 3; 4 5 Inf]
a[isinf(a)] = NaN

但这在 Julia 1.0.1 上给了我一个错误:
 ERROR: MethodError: no method matching isinf(::Array{Float64,2})
Closest candidates are:
isinf(::BigFloat) at mpfr.jl:851
isinf(::Missing) at missing.jl:79
isinf(::ForwardDiff.Dual) at <path on my local machine>

是什么赋予了?

最佳答案

作为补充评论。执行此操作的标准函数是 replace! .你可以这样使用它:

julia>  a = [1 2 3; 4 5 Inf]
2×3 Array{Float64,2}:
1.0 2.0 3.0
4.0 5.0 Inf

julia> replace!(a, Inf=>NaN)
2×3 Array{Float64,2}:
1.0 2.0 3.0
4.0 5.0 NaN

对于大型阵列,它的性能将优于广播。

如果你真的需要速度,你可以写一个像这样的简单函数:
function inf2nan(x)
for i in eachindex(x)
@inbounds x[i] = ifelse(isinf(x[i]), NaN, x[i])
end
end

现在让我们简单比较一下三个选项的性能:
julia> function bench()
x = fill(Inf, 10^8)
@time x[isinf.(x)] .= NaN
x = fill(Inf, 10^8)
@time replace!(x, Inf=>NaN)
x = fill(Inf, 10^8)
@time inf2nan(x)
end
bench (generic function with 1 method)

julia> bench()
0.980434 seconds (9 allocations: 774.865 MiB, 0.16% gc time)
0.183578 seconds
0.109929 seconds

julia> bench()
0.971408 seconds (9 allocations: 774.865 MiB, 0.03% gc time)
0.184163 seconds
0.102161 seconds

关于julia - 如何在 Julia 1.0 的数组中用 NaN 替换 Inf 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53463436/

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