Skip to main content

Simple fast linear interpolation for Python

Project description

sinterp

Simple fast linear interpolation for Python

sinterp functions:

interp1d(x: float, xp: list, yp: list, make_checks: bool = CHECK_INPUT)

x - x-variable for interpolation, float

xp - list with x-values of function, list

yp - list with y-values of function, list

make_checks - bool-flag of enable/disable for check inputs. Default value is True.

interp2d(x: float, y: float, xp: list, yp: list, zp: list, make_checks: bool = CHECK_INPUT)

x, y - x- and y-variable for interpolation, float

xp - list with x-values of function, list

yp - list with y-values of function, list

zp - list with y-values of function, list

make_checks - bool-flag of enable/disable for check inputs. Default value is True.

Benchmarks

Simple benchmark for compare 1d-interpolation with Numpy:

import random
import time

from numpy import interp

from sinterp import interp1d

times = []  # list with time of calculation
ratios = []  # ratio of calc with interp to interp1d
deltas = []  # summary delta of difference results by iteration
size = []

for kk in range(2, 5):
    x1 = 0
    x2 = int(10 ** kk)
    size.append(x2)

    xp = [float(_) for _ in range(x1, x2 + 1)]
    yp = [_ ** 3.0 for _ in xp]

    x = [random.uniform(float(x1), float(x2)) for _ in range(10000)]

    start_time = time.time()
    v_1 = [interp(_, xp, yp) for _ in x]
    time_1 = time.time() - start_time

    start_time = time.time()
    v_2 = [interp1d(_, xp, yp) for _ in x]
    time_2 = time.time() - start_time

    times.append([time_1, time_2])
    ratios.append(time_1 / time_2)
    deltas.append(sum(_[1] - _[0] for _ in zip(v_1, v_2)))

# Print benchmark ratios
print('--- Benchmark results ---')
print('List size : Ratio')
for r, v in zip(size, ratios):
    print('    %i : %f' % (r, v))
print('Check convergence. Difference between interp and interp1d = %f' % max(deltas))

Results Python 3.6 Win10 (at my laptop):

--- Benchmark results ---
List size : Ratio
    10 : 2.312361
    100 : 1.810310
    1000 : 7.835562
    10000 : 54.542985
    100000 : 514.559448
Check convergence. Delta between interp and interp1d = 0.000000

Results Python 3.7 Linux-Mint 19.3

--- Benchmark results ---
List size : Ratio
    10 : 2.409009
    100 : 3.836711
    1000 : 19.986599
    10000 : 141.633523
    100000 : 1155.362543
Check convergence. Delta between interp and interp1d = 0.000000

Simple benchmark for compare interp2d from SciPy with sinterp

import random
import time

from numpy import meshgrid, array
from scipy.interpolate import interp2d as sc_interp2d

from sinterp import interp2d as si_interp2d

times = []  # list with time of calculation
ratios = []  # ratio of calc with interp to interp1d
deltas = []  # summary delta of difference results by iteration
size = []

for kk in range(2, 5):
    x1 = 0
    x2 = int(10 ** kk)
    size.append(x2)
    xp = [float(_) for _ in range(0, x2 + 1)]
    yp = [float(_) for _ in range(0, x2 + 1)]
    zp = [[x * y for y in yp] for x in xp]

    XP_GRID, YP_GRID = meshgrid(xp, yp)
    ZP_GRID = array(zp)

    xv = [random.uniform(0.0, x2) for _ in range(1000)]
    yv = [random.uniform(0.0, x2) for _ in range(1000)]

    start_time = time.time()
    sci_interp2d = sc_interp2d(xp, yp, zp)
    v_1 = [sci_interp2d(x, y) for x, y in zip(xv, yv)]
    time_1 = time.time() - start_time

    start_time = time.time()
    v_2 = [si_interp2d(x, y, xp, yp, zp) for x, y in zip(xv, yv)]
    time_2 = time.time() - start_time

    times.append([time_1, time_2])
    ratios.append(time_1 / time_2)
    deltas.append(sum(_[1] - _[0] for _ in zip(v_1, v_2)))

# Print benchmark ratios
print('--- Benchmark results ---')
print('List size : Ratio')
for r, v in zip(size, ratios):
    print('    %i : %f' % (r, v))
print('Check convergence. Difference between interp2d (scipy) and interp2d (sinterp) = %f' % max(deltas))

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

sinterp-0.2.0.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

sinterp-0.2.0-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file sinterp-0.2.0.tar.gz.

File metadata

  • Download URL: sinterp-0.2.0.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.6.9

File hashes

Hashes for sinterp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 91c79759a7c86221c28f783b4a420109068c15d507b644886beba0d002374ff1
MD5 8bc87e211b232f56cb2ca055b3c89f36
BLAKE2b-256 9acb0f96def7d780faef94e4cf43f74fe218ddf8afd7a8a3992782d1d1a51506

See more details on using hashes here.

File details

Details for the file sinterp-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: sinterp-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 4.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.6.9

File hashes

Hashes for sinterp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f4a6c27ba8262b091a5aa2d4297bab18d3b02c9c8d84457308c97b8f4c65b435
MD5 47630ae5a9d3e1cef47276b05bc89081
BLAKE2b-256 641887cc4c9d6a19304834e1df52914afe836e14dce05757c68c46067d2f7644

See more details on using hashes here.

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