[Numpy-discussion] numpy.vectorize performance

Nick Fotopoulos nvf at MIT.EDU
Thu Jul 13 19:08:19 CDT 2006


Dear all,

I often make use of numpy.vectorize to make programs read more like  
the physics equations I write on paper.  numpy.vectorize is basically  
a wrapper for numpy.frompyfunc.  Reading Travis's Scipy Book (mine is  
dated Jan 6 2005) kind of suggests to me that it returns a full- 
fledged ufunc exactly like built-in ufuncs.

First, is this true?  Second, how is the performance?  i.e., are my  
functions performing approximately as fast as they could be or would  
they still gain a great deal of speed by rewriting it in C or some  
other compiled python accelerator?

As an aside, I've found the following function decorator to be  
helpful for readability, and perhaps others will enjoy it or improve  
upon it:

def autovectorized(f):
     """Function decorator to do vectorization only as necessary.
     vectorized functions fail for scalar inputs."""
     def wrapper(input):
         if type(input) == numpy.arraytype:
             return numpy.vectorize(f)(input)
         return f(input)
     return wrapper

For those unfamiliar to the syntactic joys of Python 2.4, you can  
then use this as:

@autovectorized
def myOtherwiseScalarFunction(*args):
     ...

and now the function will work with both numpy arrays and scalars.

Take care,
Nick




More information about the Numpy-discussion mailing list