vectorize doesn't like functools.partial
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?
On Wed, Sep 8, 2010 at 7:44 AM, Neal Becker <ndbecker2@gmail.com> 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 NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
josef.pktd@gmail.com wrote:
On Wed, Sep 8, 2010 at 7:44 AM, Neal Becker <ndbecker2@gmail.com> 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 NumPy-Discussion@scipy.org 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)
On Wed, Sep 8, 2010 at 10:53 AM, Neal Becker <ndbecker2@gmail.com> wrote:
josef.pktd@gmail.com wrote:
On Wed, Sep 8, 2010 at 7:44 AM, Neal Becker <ndbecker2@gmail.com> 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 NumPy-Discussion@scipy.org 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
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
josef.pktd@gmail.com wrote:
On Wed, Sep 8, 2010 at 10:53 AM, Neal Becker <ndbecker2@gmail.com> wrote:
josef.pktd@gmail.com wrote:
On Wed, Sep 8, 2010 at 7:44 AM, Neal Becker <ndbecker2@gmail.com> 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 NumPy-Discussion@scipy.org 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))
participants (2)
-
josef.pktd@gmail.com -
Neal Becker