[Scipy-svn] r5157 - trunk/scipy/interpolate/tests

scipy-svn at scipy.org scipy-svn at scipy.org
Fri Nov 21 16:08:44 EST 2008


Author: ptvirtan
Date: 2008-11-21 15:08:20 -0600 (Fri, 21 Nov 2008)
New Revision: 5157

Modified:
   trunk/scipy/interpolate/tests/test_interpolate.py
Log:
Tests for kind='nearest' interpolation

Modified: trunk/scipy/interpolate/tests/test_interpolate.py
===================================================================
--- trunk/scipy/interpolate/tests/test_interpolate.py	2008-11-21 21:07:57 UTC (rev 5156)
+++ trunk/scipy/interpolate/tests/test_interpolate.py	2008-11-21 21:08:20 UTC (rev 5157)
@@ -50,6 +50,7 @@
         interp1d(self.x10, self.y10, kind='slinear')
         interp1d(self.x10, self.y10, kind='quadratic')
         interp1d(self.x10, self.y10, kind='zero')
+        interp1d(self.x10, self.y10, kind='nearest')
         interp1d(self.x10, self.y10, kind=0)
         interp1d(self.x10, self.y10, kind=1)
         interp1d(self.x10, self.y10, kind=2)
@@ -150,6 +151,24 @@
             np.array([2.4, 5.6, 6.0]),
         )
 
+    def test_nearest(self):
+        """Check the actual implementation of nearest-neighbour interpolation.
+        """
+
+        interp10 = interp1d(self.x10, self.y10, kind='nearest')
+        assert_array_almost_equal(
+            interp10(self.x10),
+            self.y10,
+        )
+        assert_array_almost_equal(
+            interp10(1.2),
+            np.array(1.),
+        )
+        assert_array_almost_equal(
+            interp10([2.4, 5.6, 6.0]),
+            np.array([2., 6., 6.]),
+        )
+
     def _bounds_check(self, kind='linear'):
         """ Test that our handling of out-of-bounds input is correct.
         """
@@ -180,18 +199,19 @@
         raises_bounds_error([0.0, 5.0, 9.0])
 
     def test_bounds(self):
-        for kind in ('linear', 'cubic'):
+        for kind in ('linear', 'cubic', 'nearest',
+                     'slinear', 'zero', 'quadratic'):
             self._bounds_check(kind=kind)
 
-    def _nd_check(self, kind='linear'):
+    def _nd_check_interp(self, kind='linear'):
         """ Check the behavior when the inputs and outputs are multidimensional.
         """
 
         # Multidimensional input.
         interp10 = interp1d(self.x10, self.y10, kind=kind)
         assert_array_almost_equal(
-            interp10(np.array([[3.4, 5.6], [2.4, 7.8]])),
-            np.array([[3.4, 5.6], [2.4, 7.8]]),
+            interp10(np.array([[3., 5.], [2., 7.]])),
+            np.array([[3., 5.], [2., 7.]]),
         )
 
         # Scalar input -> 0-dim scalar array output
@@ -201,55 +221,57 @@
         # Multidimensional outputs.
         interp210 = interp1d(self.x10, self.y210, kind=kind)
         assert_array_almost_equal(
-            interp210(1.5),
-            np.array([1.5, 11.5]),
+            interp210(1.),
+            np.array([1., 11.]),
         )
         assert_array_almost_equal(
-            interp210(np.array([1.5, 2.4])),
-            np.array([[1.5, 2.4],
-                      [11.5, 12.4]]),
+            interp210(np.array([1., 2.])),
+            np.array([[1., 2.],
+                      [11., 12.]]),
         )
 
         interp102 = interp1d(self.x10, self.y102, axis=0, kind=kind)
         assert_array_almost_equal(
-            interp102(1.5),
-            np.array([3.0, 4.0]),
+            interp102(1.),
+            np.array([2.0, 3.0]),
         )
         assert_array_almost_equal(
-            interp102(np.array([1.5, 2.4])),
-            np.array([[3.0, 4.0],
-                      [4.8, 5.8]]),
+            interp102(np.array([1., 3.])),
+            np.array([[2., 3.],
+                      [6., 7.]]),
         )
 
         # Both at the same time!
-        x_new = np.array([[3.4, 5.6], [2.4, 7.8]])
+        x_new = np.array([[3., 5.], [2., 7.]])
         assert_array_almost_equal(
             interp210(x_new),
-            np.array([[[3.4, 5.6], [2.4, 7.8]],
-                      [[13.4, 15.6], [12.4, 17.8]]]),
+            np.array([[[3., 5.], [2., 7.]],
+                      [[13., 15.], [12., 17.]]]),
         )
         assert_array_almost_equal(
             interp102(x_new),
-            np.array([[[6.8, 7.8], [11.2, 12.2]],
-                      [[4.8, 5.8], [15.6, 16.6]]]),
+            np.array([[[6., 7.], [10., 11.]],
+                      [[4., 5.], [14., 15.]]]),
         )
 
-        # Check large ndim output
+    def _nd_check_shape(self, kind='linear'):
+        # Check large ndim output shape
         a = [4, 5, 6, 7]
         y = np.arange(np.prod(a)).reshape(*a)
         for n, s in enumerate(a):
             x = np.arange(s)
             z = interp1d(x, y, axis=n, kind=kind)
-            assert_array_almost_equal(z(x), y)
+            assert_array_almost_equal(z(x), y, err_msg=kind)
 
             x2 = np.arange(2*3*1).reshape((2,3,1)) / 12.
             b = list(a)
             b[n:n+1] = [2,3,1]
-            assert_array_almost_equal(z(x2).shape, b)
+            assert_array_almost_equal(z(x2).shape, b, err_msg=kind)
 
     def test_nd(self):
-        for kind in ('linear', 'cubic'):
-            self._nd_check(kind=kind)
+        for kind in ('linear', 'cubic', 'slinear', 'quadratic', 'nearest'):
+            self._nd_check_interp(kind=kind)
+            self._nd_check_shape(kind=kind)
 
 class TestLagrange(TestCase):
 




More information about the Scipy-svn mailing list