Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add Interpolations.jl extension #586

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open

add Interpolations.jl extension #586

wants to merge 5 commits into from

Conversation

rafaqz
Copy link
Owner

@rafaqz rafaqz commented Dec 27, 2023

This is an idea for adding an Interpolations.jl extension.

It turns out there isn't a clean way to extend Interpolations.jl methods like interpolate or scale because really on a DimArray you would always want both and have the information for both already in one object.

So the idea here (and what i personally need the most) is to define an interpolation method that lets you interpolate from one AbstractDimArray to another in a single command.

We have most of the information we need to choose the interpolation method - users can specify e.g. Cubic or Linear if they really want to. But BSpline/Gridded we know from Regular / Irregular etc.

We may also want to provide an interpolator object that can interpolate points.

I'll probably leave this here for a while until its clearer what the best strategy is, but comments are welcome.

@rafaqz
Copy link
Owner Author

rafaqz commented Jan 30, 2024

Closes #420

@DanDeepPhase we can implement this pretty easily now. But if you have any comments on syntax or how this should work that would help. See the new tests added here for an example.

@rafaqz rafaqz closed this Mar 10, 2024
@asinghvi17
Copy link
Collaborator

Any particular reason this was closed?

@rafaqz
Copy link
Owner Author

rafaqz commented Jun 24, 2024

In favour of

#609

Which needs tests, and I forgot about. And I'm not really sure on the best syntax. Feedback appreciated.

* linear interpolation

* Apply suggestions from code review

Co-authored-by: Rafael Schouten <[email protected]>

* Simpler implementation

* compat

* fixed typo missed =

* Update ext/DimensionalDataInterpolations.jl

* Update ext/DimensionalDataInterpolations.jl

---------

Co-authored-by: Rafael Schouten <[email protected]>
@asinghvi17
Copy link
Collaborator

Did #609 get merged here? I don't see the log

@rafaqz
Copy link
Owner Author

rafaqz commented Jun 24, 2024

It got merged to the branch yes, but the PR seems dead there's no reopen button

Maybe that's just a phone app thing idk

@asinghvi17 asinghvi17 reopened this Jun 24, 2024
@asinghvi17
Copy link
Collaborator

I guess the PR had to be reopened for the log to refresh...

@haakon-e
Copy link
Contributor

Glad to find this PR. It seems the PR as-is returns an array upon interpolation

To add on to how cool this would be, here's a hacked up version that for DimVectors (but probably easy to generalize) would return a DimVector after interpolation:

function Interpolations.linear_interpolation(A::AbstractDimVector; kw...)
    function itp(pts...)
        itp = linear_interpolation(DimensionalData.index(dims(A)), A; kw...)
        valtuple = lookup(pts, dims(A))
        intp = itp(valtuple...)
        DimVector(intp, pts)
    end	
end

example:

da = cumsum(rand(X(0:0.1:1)))
itpp = linear_interpolation(da)
da_itp = itpp(X(0:0.01:1))

# plotting
f,a,s = scatter(da_itp, markersize=4, label = "new pts")
scatter!(a, da, label = "old pts")
axislegend()
f
image

@rafaqz
Copy link
Owner Author

rafaqz commented Aug 26, 2024

It's just a little tricky getting the syntax right, if you want to take over find shing the PR that would help it along

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants