[Scipy-svn] r4615 - branches/stats_models

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Aug 7 21:30:32 EDT 2008


Author: tom.waite
Date: 2008-08-07 20:30:30 -0500 (Thu, 07 Aug 2008)
New Revision: 4615

Modified:
   branches/stats_models/_bspline.py
Log:
weave to c-ext

Modified: branches/stats_models/_bspline.py
===================================================================
--- branches/stats_models/_bspline.py	2008-08-08 01:30:10 UTC (rev 4614)
+++ branches/stats_models/_bspline.py	2008-08-08 01:30:30 UTC (rev 4615)
@@ -20,7 +20,7 @@
 
 from scipy.linalg import solveh_banded
 from scipy.optimize import golden
-from scipy.stats.models import _bspline
+from scipy.stats.models import _hbspline
 
 
 # Issue warning regarding heavy development status of this module
@@ -198,6 +198,10 @@
                  Bspline to avoid extra evaluation in the __call__ method
 
     '''
+    # FIXME: update parameter names, replace single character names 
+    # FIXME: `order` should be actual spline order (implemented as order+1)
+    ## FIXME: update the use of spline order in extension code (evaluate is recursively called) 
+    # FIXME: eliminate duplicate M and m attributes (m is order, M is related to tau size)
 
     def __init__(self, knots, order=4, M=None, coef=None, x=None):
 
@@ -285,7 +289,7 @@
         x.shape = (N.product(_shape,axis=0),)
         if i < self.tau.shape[0] - 1:
            ## TODO: OWNDATA flags...
-            v = _bspline.evaluate(x, self.tau, self.m, d, i, i+1)
+            v = _hbspline.evaluate(x, self.tau, self.m, d, i, i+1)
         else:
             return N.zeros(x.shape, N.float64)
 
@@ -329,7 +333,7 @@
 
         d = N.asarray(d)
         if d.shape == ():
-            v = _bspline.evaluate(x, self.tau, self.m, int(d), lower, upper)
+            v = _hbspline.evaluate(x, self.tau, self.m, int(d), lower, upper)
         else:
             if d.shape[0] != 2:
                 raise ValueError, "if d is not an integer, expecting a jx2 \
@@ -338,7 +342,7 @@
 
             v = 0
             for i in range(d.shape[1]):
-                v += d[1,i] * _bspline.evaluate(x, self.tau, self.m, d[0,i], lower, upper)
+                v += d[1,i] * _hbspline.evaluate(x, self.tau, self.m, d[0,i], lower, upper)
 
         v.shape = (upper-lower,) + _shape
         if upper == self.tau.shape[0] - self.m:
@@ -381,7 +385,7 @@
 
         d = N.squeeze(d)
         if N.asarray(d).shape == ():
-            self.g = _bspline.gram(self.tau, self.m, int(d), int(d))
+            self.g = _hbspline.gram(self.tau, self.m, int(d), int(d))
         else:
             d = N.asarray(d)
             if d.shape[0] != 2:
@@ -393,7 +397,7 @@
             self.g = 0
             for i in range(d.shape[1]):
                 for j in range(d.shape[1]):
-                    self.g += d[1,i]* d[1,j] * _bspline.gram(self.tau, self.m, int(d[0,i]), int(d[0,j]))
+                    self.g += d[1,i]* d[1,j] * _hbspline.gram(self.tau, self.m, int(d[0,i]), int(d[0,j]))
         self.g = self.g.T
         self.d = d
         return N.nan_to_num(self.g)
@@ -433,6 +437,8 @@
 
            fhat = ARGMIN_f SUM_i=1^n (y_i-f(x_i))^2 + pen * int f^(2)^2
 
+	   int is integral. pen is lambda (from Hastie)
+
            See Chapter 5 of
 
            Hastie, Tibshirani and Friedman (2001). "The Elements of Statistical
@@ -561,7 +567,7 @@
         """
 
         if self.pen > 0:
-            _invband = _bspline.invband(self.chol.copy())
+            _invband = _hbspline.invband(self.chol.copy())
             tr = _trace_symbanded(_invband, self.btb, lower=1)
             return tr
         else:
@@ -655,3 +661,8 @@
             return a
 
         a = golden(_gcv, args=(y,x), brack=bracket, tol=tol)
+
+
+
+
+




More information about the Scipy-svn mailing list