I am having some problems with the numpy.vectorize function.
I have defined a function that works well for single element input but the vectorized vers
Because you don't specify otypes (the output data type) when you vectorize your function, NumPy assumes you want to return an array of int32 values.
When given x the vectorized function vfunz first sees -10., returns the integer 0, and so decides that the dtype of the returned array should be int32.
To fix this, specify otypes to be np.float values:
vfunz = np.vectorize(c_inf_comp, otypes=[np.float])
You then get your expected result:
>>> vfunz(x)
array([ 0. , 0.99004983])
(Alternatively, the issue can be fixed by returning a float value in the else condition of c_inf_comp, i.e. return 0.0. That way, the function generated by np.vectorize(c_inf_comp) will return an array of float values even if it sees a negative number first.)