# [NumPy-Tickets] [NumPy] #1487: vectorize(): result depends on execution order; is this normal?

NumPy Trac numpy-tickets@scipy....
Fri May 21 09:14:05 CDT 2010

#1487: vectorize(): result depends on execution order; is this normal?
------------------------------+---------------------------------------------
Reporter:  lebigot           |       Owner:  somebody
Type:  defect            |      Status:  new
Priority:  normal            |   Milestone:  2.0.0
Component:  numpy.core        |     Version:  1.3.0
Keywords:  vectorize, dtype  |
------------------------------+---------------------------------------------
The dtype of the array returned by a vectorize()'d function depends on the
execution order:

Session 1:
{{{
In [1]: f_vec = vectorize(lambda x: x)
In [3]: f_vec(arange(3))
Out[3]: array([0, 1, 2])
In [4]: f_vec(arange(0.1, 3))  # floats
Out[4]: array([0, 1, 2])  # integers
}}}
Session 2:
{{{
In [1]: f_vec = vectorize(lambda x: x)
In [2]: f_vec(arange(0.1, 3))  # floats, same as above
Out[2]: array([ 0.1,  1.1,  2.1])  # floats, and not integers as above
}}}

Thus, vectorize() has a serious side effect: the dtype of an array
returned by a vectorized function depends on which vectorized function was
called first!

This creates bugs that are hard to detect, because such a behavior is
highly unusual.

I had understood from the documentation of vectorize(f) that the type of
the first value returned by '''f''' instead determined the dtype of the
returned array…

--
Ticket URL: <http://projects.scipy.org/numpy/ticket/1487>
NumPy <http://projects.scipy.org/numpy>
My example project