[SciPy-User] Return type of scipy.interpolate.splev for input array of length 1
Mon Jan 18 09:59:46 CST 2010
On Sun, Jan 17, 2010 at 5:25 AM, Yves Frederix <email@example.com> wrote:
> I stumbled upon the following unlogical behavior of
> scipy.interpolate.splev. When presented with a length-1 array, the
> output is converted to a scalar.
> import scipy.interpolate
> import numpy as N
> x = N.arange(5.)
> y = N.arange(5.)
> tck = scipy.interpolate.splrep(x,y)
> x_eval = N.asarray([1.])
> y_eval = scipy.interpolate.splev(x_eval, tck)
> print 'scipy.interpolate.splev(x_eval, tck):', y_eval
> print 'type(x_eval):', type(x_eval)
> print 'type(y_eval):', type(y_eval)
> with output
> scipy.interpolate.splev(x_eval, tck): 1.0
> type(x_eval): <type 'numpy.ndarray'>
> type(y_eval): <type 'numpy.float64'>
> It was rather unexpected that the type of input and output data are
> different. After checking interpolate/fitpack.py it seems that this
> behavior results from the fact that the length-1 case is explicitly
> treated differently (probably to be able to deal with the case of
> scalar input, for which scalar output is expected):
> 434 def splev(x,tck,der=0):
> 487 if ier: raise TypeError,"An error occurred"
> 488 if len(y)>1: return y
> 489 return y
> Wouldn't it be less confusing to have the return value always have the
> same type as the input data?
I don't know of any "official" policy.
scipy.stats has switched for the most part to the same behavior. I
think, mainly it is just a convention to have a nicer output when the
return value is a scalar.
One problem with making the output depend on the input type or shape
is that in most functions I know, this information is not kept inside
the function. Usually the input of array_like (arrays, lists, tuples,
scalar numbers) is converted to an ndarray with np.asarray or
The output then is independent of the input type (which hurts also if
a user wants to work with matrices or other subclasses of ndarrays).
On the other hand, if I want to use a list as input for convenience, I
don't really want a list as output, I want an ndarray.
That's my view, I don't really care in which direction the convention
goes, but I like the consistency.
> SciPy-User mailing list
More information about the SciPy-User