I need a NaN when the target isn’t in the “interior” in linear interpolation:
using Distributions
using Interpolations
const imax_in = 20
const imax_out = 20
xax_in, v_in =
let dx = rand(Uniform(1.0, 10.0), imax_in)
f(x) = x - x^3
xax = [0; cumsum(dx)]
xax, f.(xax)
end
xax_out =
let dx = rand(Uniform(0.5, 20.0), imax_out)
[2.3; cumsum(dx)]
end
ip = linear_interpolation(xax_in, v_in)
v_out = ip.(xax_out) #-> BoundsError as expected.
Currently, I get BoundsError
of course, but I want NaN values there.
Is there an option to the interpolator to return NaN?
The following is an off-topic question. Are there arrays and dictionaries that return a prescribed values (such as NaN
and nothing
) instead of throwing BoundsError or KeyError?
This is documented here, i.e.,
ip = linear_interpolation(xax_in, v_in; extrapolation_bc = NaN)
You may also want to check the section on Extrapolation.
PS: For vectors, arrays or dictionaries you can just use get
which takes a default argument for out-of-bound keys:
julia> A = reshape(1:6, 2, 3);
julia> get(A, (1, 2), NaN)
3
julia> get(A, (4, 2), NaN)
NaN
2 Likes
Thank you!!
I’ve been using Julia more than a year but still I’m not able to find right documentations . . . Perhaps because Julia is too young, Google search isn’t working for me. Of course I visited the official documentation of Interpolations.jl
but somehow I failed to locate the information.
Not just Interpolations
but all sorts of Julia packages. I end up asking simple questions whose answers are in the official documentations. . . .
Regarding get()
: Thank you for that, too!
It’s strange that I’ve never heard of such a fundamental function as that. I’ve sometimes used getindex( )
as a function form of [ ]
, but get()
seems to be more fundamental (generic) than getindex()
. For one thing, getindex(A, 4, 2)
could be realized as get(A, (4,2); outofrange=Throw())
(mimicking linear_interpolation()
). I mean that getindex()
could be viewed as a special case of get()
, but not the other way round.