[SciPy-user] Vectorize vs Map

lorenzo bolla lbolla at gmail.com
Fri Mar 16 05:37:21 EDT 2007


here is a simple timing on my machine.

---------------------------------------------------

import scipy as S
from timeit import Timer

def f(x):
    return S.sqrt(S.absolute(x)**2)

x = S.array(S.rand(1000))
fv = S.vectorize(f)
fu = S.frompyfunc(f,1,1)

def test():
    #f(x)
    #fv(x)
    fu(x)

if __name__ == '__main__':
    t = Timer('test()', 'from __main__ import test')
    n = 100
    print "%.2f usec/pass" % (1e6*t.timeit(number=n)/n)

---------------------------------------------------

I get:
 229.84 usec/pass for f(x) 119410.40 usec/pass for fv(x) 114513.80 usec/pass
for fu(x)

vectorize and frompyfunc create functions roughly 500 times slower than the
one using ndarrays arithmetics (even if it cannot operate on lists, just
ndarrays).

lorenzo.


On 3/15/07, Robert Kern <robert.kern at gmail.com> wrote:
>
> Fernando Perez wrote:
> > On 3/15/07, Robert Kern <robert.kern at gmail.com> wrote:
> >> Lorenzo Isella wrote:
> >>> Dear All,
> >>> Probably another newbie question: I like quite a lot the vectorize()
> >>> command which allows me to skip iterations on functions, but the map()
> >>> command on a list performs a similar task if I am not mistaken.
> >>> Is there any reason to favour one above the other or is it just a
> >>> matter of taste?
> >> vectorize() takes a Python function and turns it into a ufunc. ufuncs
> do a lot
> >> more than map() does. They can take multidimensional arrays. n-ary
> ufuncs can
> >> take multiple inputs and broadcast them against each other. ufuncs have
> methods
> >> like .inner() and .reduce() which are quite powerful.
> >
> > Mmh, isn't that what 'frompyfunc' does instead?  vectorize doesn't
> > seem to produce a true ufunc.  Perhaps I'm just misunderstanding
> > something:
>
> No, just my poor memory. I don't use either.
>
> --
> Robert Kern
>
> "I have come to believe that the whole world is an enigma, a harmless
> enigma
> that is made terrible by our own mad attempt to interpret it as though it
> had
> an underlying truth."
> -- Umberto Eco
> _______________________________________________
> SciPy-user mailing list
> SciPy-user at scipy.org
> http://projects.scipy.org/mailman/listinfo/scipy-user
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20070316/769f01d2/attachment.html>


More information about the SciPy-User mailing list