Skip to main content

N-dimensional interpolation/extrapolation methods

Project description

interpn

Python bindings to the interpn Rust library for N-dimensional interpolation and extrapolation.

Docs | Repo | Rust Library (github) | Rust Docs (docs.rs)

Features

Feature →
↓ Interpolant Method
Regular
Grid
Rectilinear
Grid
Json
Serialization
Linear
Cubic

The methods provided here, while more limited in scope than scipy's, are

  • significantly faster for higher dimensions (1-3 orders of magnitude under most conditions)
  • use almost no RAM (and perform no heap allocations at all)
  • produce significantly improved floating-point error (by 1-2 orders of magnitude)
  • are json-serializable using Pydantic
  • can also be used easily in web and embedded applications via the Rust library
  • are permissively licensed

ND throughput 1 obs

See here for more info about quality-of-fit, throughput, and memory usage.

Installation

pip install interpn

Example: Available Methods

import interpn
import numpy as np

# Build grid
x = np.linspace(0.0, 10.0, 5)
y = np.linspace(20.0, 30.0, 4)
grids = [x, y]

xgrid, ygrid = np.meshgrid(x, y, indexing="ij")
zgrid = (xgrid + 2.0 * ygrid)  # Values at grid points

# Grid inputs for true regular grid
dims = [x.size, y.size]
starts = np.array([x[0], y[0]])
steps = np.array([x[1] - x[0], y[1] - y[0]])

# Initialize different interpolators
# Call like `linear_regular.eval([xs, ys])`
linear_regular = interpn.MultilinearRegular.new(dims, starts, steps, zgrid)
cubic_regular = interpn.MulticubicRegular.new(dims, starts, steps, zgrid)
linear_rectilinear = interpn.MultilinearRectilinear.new(grids, zgrid)
cubic_rectilinear = interpn.MulticubicRectilinear.new(grids, zgrid)

Example: Multilinear Interpolation on a Regular Grid

import interpn
import numpy as np

# Build grid
x = np.linspace(0.0, 10.0, 5)
y = np.linspace(20.0, 30.0, 4)

xgrid, ygrid = np.meshgrid(x, y, indexing="ij")
zgrid = (xgrid + 2.0 * ygrid)  # Values at grid points

# Grid inputs for true regular grid
dims = [x.size, y.size]
starts = np.array([x[0], y[0]])
steps = np.array([x[1] - x[0], y[1] - y[0]])

# Observation points pointed back at the grid
obs = [xgrid.flatten(), ygrid.flatten()]

# Initialize
interpolator = interpn.MultilinearRegular.new(dims, starts, steps, zgrid.flatten())

# Interpolate
out = interpolator.eval(obs)

# Check result
assert np.allclose(out, zgrid.flatten(), rtol=1e-13)

# Serialize and deserialize
roundtrip_interpolator = interpn.MultilinearRegular.model_validate_json(
    interpolator.model_dump_json()
)
out2 = roundtrip_interpolator.eval(obs)

# Check result from roundtrip serialized/deserialized interpolator
assert np.all(out == out2)

License

Licensed under either of

at your option.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

interpn-0.2.1.tar.gz (238.2 kB view hashes)

Uploaded Source

Built Distributions

interpn-0.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

interpn-0.2.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (368.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

interpn-0.2.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (269.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

interpn-0.2.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (258.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

interpn-0.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (244.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

interpn-0.2.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl (261.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.5+ i686

interpn-0.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

interpn-0.2.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (368.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

interpn-0.2.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (269.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

interpn-0.2.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (258.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

interpn-0.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (244.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

interpn-0.2.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl (261.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.5+ i686

interpn-0.2.1-cp311-none-win_amd64.whl (171.0 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

interpn-0.2.1-cp311-none-win32.whl (158.1 kB view hashes)

Uploaded CPython 3.11 Windows x86

interpn-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.8 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

interpn-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (359.6 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

interpn-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (269.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

interpn-0.2.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (258.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

interpn-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (244.1 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

interpn-0.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (261.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.5+ i686

interpn-0.2.1-cp311-cp311-macosx_11_0_arm64.whl (228.0 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

interpn-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl (241.9 kB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

interpn-0.2.1-cp310-none-win_amd64.whl (171.0 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

interpn-0.2.1-cp310-none-win32.whl (158.1 kB view hashes)

Uploaded CPython 3.10 Windows x86

interpn-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

interpn-0.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (359.6 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

interpn-0.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (269.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

interpn-0.2.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (258.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

interpn-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (244.1 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

interpn-0.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (261.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.5+ i686

interpn-0.2.1-cp310-cp310-macosx_11_0_arm64.whl (228.0 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

interpn-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl (241.9 kB view hashes)

Uploaded CPython 3.10 macOS 10.12+ x86-64

interpn-0.2.1-cp39-none-win_amd64.whl (171.0 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

interpn-0.2.1-cp39-none-win32.whl (158.1 kB view hashes)

Uploaded CPython 3.9 Windows x86

interpn-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.8 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

interpn-0.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (359.6 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

interpn-0.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (269.4 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

interpn-0.2.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (258.4 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

interpn-0.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (244.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

interpn-0.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (261.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.5+ i686

interpn-0.2.1-cp39-cp39-macosx_11_0_arm64.whl (228.0 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

interpn-0.2.1-cp39-cp39-macosx_10_12_x86_64.whl (241.9 kB view hashes)

Uploaded CPython 3.9 macOS 10.12+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page