В качестве дополнительного комментария.Стандартная функция для выполнения этого действия - 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