[email protected] wrote: > On Wed, Sep 8, 2010 at 10:53 AM, Neal Becker <[email protected]> wrote: >> [email protected] wrote: >> >>> On Wed, Sep 8, 2010 at 7:44 AM, Neal Becker <[email protected]> wrote: >>>> If I try to use vectorize on the result of functools.partial, I seem >>>> to get: >>>> >>>> ValueError: failed to determine the number of arguments for >>>> <functools.partial object at 0x4e396d8> >>>> >>>> Anything I can do about it? >>> >>> Set .nin (attribute of vectorized function, I think) directly with >>> number of arguments (int) >>> >>> Josef >>> >>>> >>>> _______________________________________________ >>>> NumPy-Discussion mailing list >>>> [email protected] >>>> http://mail.scipy.org/mailman/listinfo/numpy-discussion >>>> >> Not sure what you mean. Here is a demo of 2 problems of interop of numpy >> and functools.partial. Tried both vectorize and frompyfunc. vectorize >> gives: >> ValueError: failed to determine the number of arguments for >> <functools.partial object at 0x230b1b0> >> >> frompyfunc gives: >> TypeError: H() got multiple values for keyword argument 'iir' >> >> Note that doc for frompyfunc says: >> "Takes an arbitrary Python function..." >> >> import numpy as np >> >> class iir (object): >> def H (z): >> return 1 >> >> def H (iir, f): >> z = complex (cos (2*pi*f/fs), sin (2*pi*f/fs)) >> return iir.H (z) >> >> f = np.linspace (0, 10e6, 1000) >> #bug1 >> from functools import partial >> the_iir = iir() >> p = partial (H, iir=the_iir) >> resp_pll = np.vectorize (p)(f) >> #bug2 >> resp_pll = np.frompyfunc (p, 1, 1)(f) > > looks like a limitation of vectorize (fails in constructor), and nin > cannot be included in the constructor > > this should be a bug report or enhancement ticket > > a work around, after fixing other problems in your code example: > > p = partial(H, iir=the_iir) > fun = np.vectorize(lambda x: p(x)) > >>>> fun.nin > 1 >>>> fun(5) > array(1) >>>> fun(f)[:10] > array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) > > Josef Yes, I found that using lamda there is no need for partial at all. fun = np.vectorize (lambda f: H(the_iir, f))
_______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
