I’m happy to announce that DataInterpolationsND.jl has been registered. DataInterpolationsND.jl is a new interpolation package falling under the SciML umbrella. As the name suggests, this package aims to provide similar functionality to DataInterpolations.jl but in an arbitrary number of dimensions.
Given an N dimensional array, this array can be interpolated by choosing n input dimensions which leaves N -n output dimensions (where n = N means scalar output). For some history on the package see Interpolation of 2d data · Issue #402 · SciML/DataInterpolations.jl.
DataInterpolationsND.jl supports efficient, non-allocating multi-point evaluation, either in a Cartesian grid or unstructured set of points, built on top of KernelAbstractions.jl for efficient parallel computing and by caching indices and basis function values where applicable.
Current available interpolation types are:
- Constant
- Linear
- BSpline
- NURBS
As this is a new package, feel free to leave feedback on how this package could be made more useful for your use case.
20 Likes
Thank you very much! I guess I will be using this package. I am curious to know if there is any relationship with the other sciml package Surrogates.jl, which has methods that may also be regarded as interpolation
1 Like
@Vitor_Patricio_Canta thanks for your message! I wasn’t familiar with Surrogates.jl but it looks like a very interesting package. Can you elaborate on the use case you envision?
Currently there’s no relationship between the packages. If I understand correctly, to combine the packages we would have to write methods to fit interpolations to data and efficiently update that fit when new data comes in. And possibly also add methods for analytical optimization using the simple polynomial nature of the interpolations. @ChrisRackauckas thoughts?
I would say something like:
interp = NDInterpolation(u, Surrogates.RadialBasis)
so that we could use the methods in Surrogates.jl with the same interface.
I will have to read through what you are doing inside NDInterpolation. But look at this excerpt of the documentation in Surrogates:
"
Every surrogate has a different definition depending on the parameters needed. It uses the interface defined in SurrogatesBase.jl. In a nutshell, they use:
update!(::AbstractDeterministicSurrogate, x_new, y_new)
AbstractDeterministicSurrogate(value)
The first function adds a sample point to the surrogate, thus changing the internal coefficients. The second one calculates the approximation at value.
"
I guess it sorts of satifies your requirements, right? 
1 Like