{"id":14989280,"url":"https://github.com/denis-bz/intergrid","last_synced_at":"2026-03-11T03:31:41.223Z","repository":{"id":62571245,"uuid":"242388430","full_name":"denis-bz/intergrid","owner":"denis-bz","description":"Interpolate data given on an N-d box grid, uniform or non-uniform, using numpy and scipy","archived":false,"fork":false,"pushed_at":"2020-02-22T18:10:37.000Z","size":12,"stargazers_count":9,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-07T02:14:40.006Z","etag":null,"topics":["box-grids","interpolate-data","numpy","rectangular-grids","scipy","spline-interpolation"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/denis-bz.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.txt","contributing":null,"funding":null,"license":"LICENSE.BSD","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-22T18:09:33.000Z","updated_at":"2024-08-03T15:26:23.000Z","dependencies_parsed_at":"2022-11-03T17:01:08.459Z","dependency_job_id":null,"html_url":"https://github.com/denis-bz/intergrid","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/denis-bz/intergrid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denis-bz%2Fintergrid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denis-bz%2Fintergrid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denis-bz%2Fintergrid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denis-bz%2Fintergrid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/denis-bz","download_url":"https://codeload.github.com/denis-bz/intergrid/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denis-bz%2Fintergrid/sbom","scorecard":{"id":334017,"data":{"date":"2025-08-11","repo":{"name":"github.com/denis-bz/intergrid","commit":"64fcd1a077c327219ee2905c553866205ab85aef"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/1 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.BSD:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-18T04:15:31.828Z","repository_id":62571245,"created_at":"2025-08-18T04:15:31.828Z","updated_at":"2025-08-18T04:15:31.828Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30369379,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"online","status_checked_at":"2026-03-11T02:00:07.027Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["box-grids","interpolate-data","numpy","rectangular-grids","scipy","spline-interpolation"],"created_at":"2024-09-24T14:17:58.897Z","updated_at":"2026-03-11T03:31:41.209Z","avatar_url":"https://github.com/denis-bz.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Intergrid: interpolate data given on an N-d rectangular grid\n\nPurpose: interpolate data given on an N-d rectangular grid,\nuniform or non-uniform,\nusing the fast\n[scipy.ndimage.map_coordinates](https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.interpolation.map_coordinates.html).\nNon-uniform grids are first uniformized with\n[numpy.interp](https://docs.scipy.org/doc/numpy/reference/generated/numpy.interp.html).\n\nKeywords, tags: interpolation, rectangular grid, box grid, python, numpy, scipy\n\nBackground:\nthe reader should know some Python and NumPy\n([IPython](https://ipython.org) is invaluable for learning both).\nFor basics of interpolation, see\n[Bilinear interpolation](https://en.wikipedia.org/wiki/Bilinear_interpolation)\non Wikipedia. For `map_coordinates`, see the example under\n[multivariate-spline-interpolation-in-python-scipy](https://stackoverflow.com/questions/6238250/multivariate-spline-interpolation-in-python-scipy)\non stackoverflow.\n\n### Example\n\nSay we have rainfall on a 4 x 5 grid of rectangles, lat 52 .. 55 x lon -10 .. -6,\nand want to interpolate (estimate) rainfall at 1000 query points\nin between the grid points.\n\n\tfrom intergrid.intergrid import Intergrid  # .../intergrid/intergrid.py\n\n        # define the grid --\n    griddata = np.loadtxt(...)  # griddata.shape == (4, 5)\n    lo = np.array([ 52, -10 ])  # lowest lat, lowest lon\n    hi = np.array([ 55, -6 ])   # highest lat, highest lon\n\n        # set up an interpolator function \"interfunc()\" with class Intergrid --\n    interfunc = Intergrid( griddata, lo=lo, hi=hi )\n\n        # generate 1000 random query points, lo \u003c= [lat, lon] \u003c= hi --\n    query_points = lo + np.random.uniform( size=(1000, 2) ) * (hi - lo)\n\n        # get rainfall at the 1000 query points --\n    query_values = interfunc.at( query_points )  # -\u003e 1000 values\n\nWhat this does: for each [lat, lon] in query_points,\n\n1) find the square of `griddata` it's in,\ne.g. [52.5, -8.1] -\u003e [0, 3] [0, 4] [1, 4] [1, 3]\\\n2) do bilinear (multilinear) interpolation in that square,\nusing `scipy.ndimage.map_coordinates` .\n\nCheck:\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `interfunc( lo ) == griddata[0, 0]`\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `interfunc( hi ) == griddata[-1, -1]` i.e. `griddata[3, 4]`\n\n\n### Parameters\n\n`griddata`: numpy array_like, 2d 3d 4d ...\\\n`lo, hi`: user coordinates of the corners of griddata, 1d array-like, lo \u003c hi\\\n`maps`: an optional list of `dim` descriptors of piecewise-linear or nonlinear maps,\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; e.g. [[50, 52, 62, 63], None] \\ \\ # uniformize lat, linear lon; see below\\\n`copy`: make a copy of query_points, default `True`;\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `copy=False` overwrites query_points, runs in less memory\\\n`verbose`: the default 1 prints a summary of each call, with run time\\\n`order`: interpolation order:\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; default 1: bilinear, trilinear ... interpolation using all 2^dim corners\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; 0: each query point -\u003e the nearest grid point -\u003e the value there\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; 2 to 5: spline, see below\\\n`prefilter`: the kind of spline:\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; default `False`: smoothing B-spline\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `True`: exact-fit C-R spline\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; 1/3: Mitchell-Netravali spline, 1/3 B + 2/3 fit\n\n\n### Methods\n\nAfter setting up `interfunc = Intergrid(...)`, either\n\n    query_values = interfunc.at( query_points )  # or\n    query_values = interfunc( query_points )\n\ndo the interpolation. (The latter is `__call__` in python.)\n\n\n### Non-uniform rectangular grids\n\nWhat if our griddata above is at non-uniformly-spaced latitudes,\nsay [50, 52, 62, 63] ?  `Intergrid` can \"uniformize\" these\nbefore interpolation, like this:\n\n    lo = np.array([ 50, -10 ])\n    hi = np.array([ 63, -6 ])\n    maps = [[50, 52, 62, 63], None]  # uniformize lat, linear lon\n    interfunc = Intergrid( griddata, lo=lo, hi=hi, maps=maps )\n\nThis will map (transform, stretch, warp) the lats in query_points column 0\nto array coordinates in the range 0 .. 3, using `np.interp` to do\npiecewise-linear (PWL) mapping:\n\n    50  51  52  53  54  55  56  57  58  59  60  61  62  63   # lo[0] .. hi[0]\n     0  .5   1  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9  2   3\n\n`maps[1] None` says to map the lons in query_points column 1 linearly:\n\n    -10  -9  -8  -7  -6   # lo[1] .. hi[1]\n      0   1   2   3   4\n\nMapping details\n\nThe query_points are first clipped, then columns mapped linearly or non-linearly,\nthen fed to `map_coordinates` .\\\nIn `dim` dimensions (i.e. axes or columns), `lo` and `hi` are each `dim` numbers,\nthe low and high corners of the data grid.\\\n`maps` is an optional list of `dim` map descriptors, which can be\n\n* `None`: linear-transform that column, `query_points[:,j]`, to `griddata`:\\\n    `lo[j] -\u003e 0`\\\n    `hi[j] -\u003e griddata.shape[j] - 1`\n* a callable function: e.g. `np.log` does\\\n    `query_points[:,j] = np.log( query_points[:,j] )`\n* a *sorted* array describing a non-uniform grid:\\\n    `query_points[:,j] =`\\\n    `np.interp( query_points[:,j], [50, 52, 62, 63], [0, 1, 2, 3] )`\n\n\n### Download\n\n    git clone https://github.com/denis-bz/intergrid.git\n        # ? pip install --user git+https://github.com/denis-bz/intergrid.git\n        # ? pip install --user intergrid\n\n    # tell python where the intergrid directory is, e.g. in your ~/.bashrc:\n    #   export PYTHONPATH=$PYTHONPATH:.../intergrid/\n\n    # test in python or IPython:\n    from intergrid.intergrid import Intergrid  # i.e. .../intergrid/intergrid.py\n\n\n### Splines\n\n`Intergrid( ... order = 0 to 5 )` gives the spline order:\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `order=1`, the default, does bilinear, trilinear ...\ninterpolation, which looks at the grid data at all 4 8 16 .. 2^dim corners of\nthe box around each query point.\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `order=0` looks at only the one gridpoint\nnearest each query point \u0026mdash; crude but fast.\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `order = 2 to 5` does spline interpolation on a uniform\nor uniformized grid, looking at (order+1)^dim neighbors of each query point.\n\n`Intergrid( ... prefilter = False | True | 1/3 )`\nspecifies the kind of spline, for `order \u003e= 2`:\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `prefilter=0` or `False`, the default: B-spline\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `prefilter=1` or `True`: exact-fit spline\\\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; `prefilter=1/3`: M-N spline.\\\nA B-spline goes through smoothed data points,\nwith [1 4 1] smoothing, [0 0 1 0 0] -\u003e [0 1 4 1 0] / 6.\\\nAn exact-fit a.k.a interpolating spline\ngoes through the data points exactly.\nThis is not what you want for noisy data,\nand may also wiggle or overshoot more than B-splines do.\\\nAn M-N spline blends 1/3 B-spline and 2/3 exact-fit; see\nMitchell and Netravali,\n[Reconstruction filters in computer-graphics](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.125.201\u0026rep=rep1\u0026type=pdf) ,\n1988, and the plots from `intergrid/test/MNspline.py`.\n\n\u003csmall\u003e\nFine print: Exact-fit or interpolating splines can be local or global.\nCatmull-Rom splines and the original M-N splines are local:\nthey look at 4 neighbors of each query point in 1d, 16 in 2d, 64 in 3d.\nPrefiltering is global, with IIR falloff ~ 1 / 4^distance.\n(I don't know of test images that show a visible difference to local C-R).\nConfusingly, the term \"Cardinal spline\" is sometimes used\nfor local (C-R, FIR),\nand sometimes for global (IIR prefilter, then B-spline).\n\nPrefiltering is a clever transformation\nsuch that `Bspline( transform( data )) = exactfitspline( data )`.\nIt is described in a paper by M. Unser,\n[Splines: A perfect fit for signal and image processing](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.19.6706\u0026rep=rep1\u0026type=pdf) ,\n1999.\n\u003c/small\u003e\n\nUniformizing a grid with PWL, then uniform-splining, is fast and simple,\nbut not as smooth as true splining on the original non-uniform grid.\nThe differences will of course depend on the grid spacings\nand on how rough the function is.\n\n\n### Notes\n\nRun any interpolator on *your* data with orders 0, 1 ...\nto get an idea of how the results get smoother, and take longer.\nCheck a few query points by hand; plot some cross-sections.\n\n`griddata` values can be of any numpy integer or floating type: int8 uint8\n.. int32 int64 float32 float64.\nBeware of overflow: interpolating uint8 s can give values outside the range 0 .. 255.\n(Interpolation in `d` dimensions can overshoot by (9/8)^d .)\n`np.float32` will use less memory than `np.float64`,\nbut beware of functions in the flow that silently convert everything\nto float64.  The values must be numbers, not vectors.\n\nCoordinate scaling doesn't matter to `Intergrid`;\ncorner weights are calculated in unit cubes of `griddata`,\nafter scaling and mapping. If for example griddata column 3\nis multiplied by 1000, and lo[3] hi[3] too, the weights are unchanged.\n\nBox grids get big and slow above 5d.\nA cube with steps 0 .1 .2 .. 1.0 in all dimensions\nhas 11^6 ~ 1.8M points in 6d, 11^8 ~ 200M in 8d.\nOne can reduce that only with a coarser grid like 0 .5 1 in some dimensions\n(those that vary the least).\nBut time ~ 2^d per query point grows pretty fast.\n\n`map_coordinates` in 5d with `order=1` looks at 32 corner values, with average weight 3 %.\nIf the weights are roughly equal\n(which they will tend to be, by the central limit theorem ?),\nsharp edges or gradients will be blurred, and colors mixed to a grey fog.\n\nTo see how different interpolators affect images, run matplotlib\n`plt.imshow( interpolation = \"nearest\" / \"bilinear\" / ... )` .\n\n\n### Kinds of grids\n\nTerminology varies, so the basic kinds of box grids\na.k.a. rectangular grids are defined here.\n\nAn integer or Cartesian grid has integer coordinates,\ne.g.  2 x 3 x 5 points in a numpy array:\n`A = np.array((2,3,5)); A[0,0,0], A[0,0,1] .. A[1,2,4]`.\n\nA uniform box grid has nx x ny x nz ... points uniformly spaced,\nlinspace x linspace x linspace ...\nso all boxes have the same size and are axis-aligned.\nExamples: 1024 x 768 pixels on a screen,\nor 4 x 5 points at latitudes [10 20 30 40] x longitudes [-10 -9 -8 -7 -6].\n\nA non-uniform box grid also has nx x ny x nz ... points,\nbut allows non-uniform spacings,\ne.g. latitudes [-10 0 60 70] x longitudes [-10 -9 0 20 40];\nthe boxes have different sizes but are still axis-aligned.\n\n(Scattered data, as the name says, has points anywhere,\nnot only on grid lines.\nTo interpolate scattered data in `scipy`, see\n[scipy.interpolate.griddata](https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html)\nand\n[scipy.spatial.cKDTree](https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.cKDTree.html)\n.)\n\nThere are countless varieties of grids:\ngrids with holes, grids warped to various map projections,\nmultiscale / multiresolution grids ...\n\n\n### Run times\n\nSee intergrid/test/test-4d.py: a 4d grid with 1M scattered query points,\nuniform / non-uniform box grid, on a 2.5Gz i5 iMac:\n\n    shape (361, 720, 47, 8)  98M * 8\n    Intergrid: 617 msec  1000000 points in a (361, 720, 47, 8) grid  0 maps  order 1\n    Intergrid: 788 msec  1000000 points in a (361, 720, 47, 8) grid  4 maps  order 1\n\n\n### See also\n\n[scipy.ndimage.interpolation.map_coordinates](https://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.ndimage.interpolation.map_coordinates.html)\\\n[scipy reference ndimage](https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html)\\\n[stackoverflow.com/questions/tagged/scipy+interpolation](https://stackoverflow.com/questions/tagged/scipy+interpolation)\\\n[interpol 2014](https://github.com/denis-bz/interpol) -- intergrid + barypol\\\nGoogle \"regrid | resample\"\\\n`pip search interpol` (also gets string interpolation)\n\n\n### Comments welcome\n\nand testcases most welcome\\\n    \u0026mdash; denis-bz-py at t-online dot de\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenis-bz%2Fintergrid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenis-bz%2Fintergrid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenis-bz%2Fintergrid/lists"}