[Scipy-svn] r6662 - in trunk/doc/source: . tutorial
scipy-svn at scipy.org
scipy-svn at scipy.org
Tue Aug 31 18:00:43 EDT 2010
Author: ptvirtan
Date: 2010-08-31 17:00:43 -0500 (Tue, 31 Aug 2010)
New Revision: 6662
Modified:
trunk/doc/source/interpolate.rst
trunk/doc/source/tutorial/interpolate.rst
Log:
DOC: add documentation for griddata and the other N-dimensional interpolation utilities
Modified: trunk/doc/source/interpolate.rst
===================================================================
--- trunk/doc/source/interpolate.rst 2010-08-31 22:00:18 UTC (rev 6661)
+++ trunk/doc/source/interpolate.rst 2010-08-31 22:00:43 UTC (rev 6662)
@@ -22,13 +22,25 @@
Multivariate interpolation
==========================
+Unstructured data:
+
.. autosummary::
:toctree: generated/
- interp2d
+ griddata
+ LinearNDInterpolator
+ NearestNDInterpolator
+ CloughTocher2DInterpolator
Rbf
+Data given on a regular grid:
+.. autosummary::
+ :toctree: generated/
+
+ interp2d
+
+
1-D Splines
===========
Modified: trunk/doc/source/tutorial/interpolate.rst
===================================================================
--- trunk/doc/source/tutorial/interpolate.rst 2010-08-31 22:00:18 UTC (rev 6661)
+++ trunk/doc/source/tutorial/interpolate.rst 2010-08-31 22:00:43 UTC (rev 6662)
@@ -1,3 +1,4 @@
+========================================
Interpolation (:mod:`scipy.interpolate`)
========================================
@@ -3,19 +4,31 @@
.. sectionauthor:: Travis E. Oliphant
+.. sectionauthor:: Pauli Virtanen
+
.. currentmodule:: scipy.interpolate
.. contents::
-There are two general interpolation facilities available in SciPy. The
-first facility is an interpolation class which performs linear
-1-dimensional interpolation. The second facility is based on the
-FORTRAN library FITPACK and provides functions for 1- and
-2-dimensional (smoothed) cubic-spline interpolation. There are both
-procedural and object-oriented interfaces for the FITPACK library.
+There are several general interpolation facilities available in SciPy,
+for data in 1, 2, and higher dimensions:
+- A class representing an interpolant (:class:`interp1d`) in 1-D,
+ offering several interpolation methods.
-Linear 1-d interpolation (:class:`interp1d`)
---------------------------------------------
+- Convenience function :func:`griddata` offering a simple interface to
+ interpolation in N dimensions (N = 1, 2, 3, 4, ...).
+ Object-oriented interface for the underlying routines is also
+ available.
+- Functions for 1- and 2-dimensional (smoothed) cubic-spline
+ interpolation, based on the FORTRAN library FITPACK. There are both
+ procedural and object-oriented interfaces for the FITPACK library.
+
+- Interpolation using Radial Basis Functions.
+
+
+1-D interpolation (:class:`interp1d`)
+=====================================
+
The interp1d class in scipy.interpolate is a convenient method to
create a function based on fixed data points which can be evaluated
@@ -27,25 +40,83 @@
interpolates between known data values to obtain unknown values (it
also has a docstring for help). Behavior at the boundary can be
specified at instantiation time. The following example demonstrates
-it's use.
+its use, for linear and cubic spline interpolation:
.. plot::
- >>> import numpy as np
- >>> from scipy import interpolate
+ >>> from scipy.interpolate import interp1d
- >>> x = np.arange(0,10)
+ >>> x = np.linspace(0, 10, 10)
>>> y = np.exp(-x/3.0)
- >>> f = interpolate.interp1d(x, y)
+ >>> f = interp1d(x, y)
+ >>> f2 = interp1d(x, y, kind='cubic')
- >>> xnew = np.arange(0,9,0.1)
+ >>> xnew = np.linspace(0, 10, 40)
>>> import matplotlib.pyplot as plt
- >>> plt.plot(x,y,'o',xnew,f(xnew),'-')
+ >>> plt.plot(x,y,'o',xnew,f(xnew),'-', xnew, f2(xnew),'--')
+ >>> plt.legend(['data', 'linear', 'cubic'], loc='best')
+ >>> plt.show()
.. :caption: One-dimensional interpolation using the
.. class :obj:`interpolate.interp1d`
+Multivariate data interpolation (:func:`griddata`)
+==================================================
+
+Suppose you have multidimensional data, for instance for an underlying
+function *f(x, y)* you only know the values at points *(x[i], y[i])*
+that do not form a regular grid.
+
+.. plot::
+
+ Suppose we want to interpolate the 2-D function
+
+ >>> def func(x, y):
+ >>> return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2
+
+ on a grid in [0, 1]x[0, 1]
+
+ >>> grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]
+
+ but we only know its values at 1000 data points:
+
+ >>> points = np.random.rand(1000, 2)
+ >>> values = func(points[:,0], points[:,1])
+
+ This can be done with `griddata` -- below we try out all of the
+ interpolation methods:
+
+ >>> from scipy.interpolate import griddata
+ >>> grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest')
+ >>> grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear')
+ >>> grid_z2 = griddata(points, values, (grid_x, grid_y), method='cubic')
+
+ One can see that the exact result is reproduced by all of the
+ methods to some degree, but for this smooth function the piecewise
+ cubic interpolant gives the best results:
+
+ >>> import matplotlib.pyplot as plt
+ >>> plt.subplot(221)
+ >>> plt.imshow(func(grid_x, grid_y).T, extent=(0,1,0,1), origin='lower')
+ >>> plt.plot(points[:,0], points[:,1], 'k.', ms=1)
+ >>> plt.title('Original')
+ >>> plt.subplot(222)
+ >>> plt.imshow(grid_z0.T, extent=(0,1,0,1), origin='lower')
+ >>> plt.title('Nearest')
+ >>> plt.subplot(223)
+ >>> plt.imshow(grid_z1.T, extent=(0,1,0,1), origin='lower')
+ >>> plt.title('Linear')
+ >>> plt.subplot(224)
+ >>> plt.imshow(grid_z2.T, extent=(0,1,0,1), origin='lower')
+ >>> plt.title('Cubic')
+ >>> plt.gcf().set_size_inches(6, 6)
+ >>> plt.show()
+
+
+Spline interpolation
+====================
+
Spline interpolation in 1-d: Procedural (interpolate.splXXX)
------------------------------------------------------------
@@ -220,8 +291,8 @@
LSQUnivarateSpline with non-uniform knots
- >>> t = [np.pi/2-.1,np.pi/2-.1,3*np.pi/2-.1,3*np.pi/2+.1]
- >>> s = interpolate.LSQUnivariateSpline(x,y,t)
+ >>> t = [np.pi/2-.1,np.pi/2+.1,3*np.pi/2-.1,3*np.pi/2+.1]
+ >>> s = interpolate.LSQUnivariateSpline(x,y,t,k=2)
>>> ynew = s(xnew)
>>> plt.figure()
@@ -232,7 +303,6 @@
>>> plt.show()
-
Two-dimensional spline representation: Procedural (:func:`bisplrep`)
--------------------------------------------------------------------
@@ -319,14 +389,14 @@
Using radial basis functions for smoothing/interpolation
----------------------------------------------------------
+========================================================
Radial basis functions can be used for smoothing/interpolating scattered
data in n-dimensions, but should be used with caution for extrapolation
outside of the observed data range.
1-d Example
-^^^^^^^^^^^
+-----------
This example compares the usage of the Rbf and UnivariateSpline classes
from the scipy.interpolate module.
@@ -366,7 +436,7 @@
.. :caption: Example of one-dimensional RBF interpolation.
2-d Example
-^^^^^^^^^^^
+-----------
This example shows how to interpolate scattered 2d data.
More information about the Scipy-svn
mailing list