Your code still doesn't work for me in Python 2 either. But the point has been received. This sort of thing (nested arguments) should probably work.
You need to understand what the * does. It denestst the list into arguments, so that f(*[1, 2, 3]) is the same as f(1, 2, 3) You are basically calling the function as f([1, 1], [0.5, 1]) in the version with the *, and as f([[1, 1], [0.5, 1]]) in the version without. But it expects f(1, 1, 0.5, 1) I'm not sure what the best way to concatenate two numpy arrays is, but the following does work: fx(*(list(X) + list(a))) (because + on lists concatenates). Aaron Meurer On Sun, Jan 12, 2014 at 3:11 PM, Janwillem van Dijk <[email protected]> wrote: > Thanks for the comments. > You are right, that works. So that example was my lengthy scripts too far > simplified. In my actual program the functions have two arrays as input > (expectation and standard uncertainty in a measurement model) and than the * > does not work anymore. I understood from the docs that the modules='numpy' > option was meant to make this work and that is what I experienced a year or > so ago working with 2.7. So here is a modified example that still works in > 2.7 but not with me on 3.3: > > import sympy > > import numpy > > n = 2 > > x = sympy.symbols('x_0:%d' % n, real=True, bounded=True) > > formula = 'x_0 + x_1' > > y = sympy.sympify(formula) > > fx = f_x = sympy.lambdify(x, y, modules='numpy') > > X = numpy.ones(n) > > print('function value=', fx(*X)) # works on both pythons > > > a = sympy.symbols('a_0:%d' % n, real=True, bounded=True) > > formula = 'a_0 * x_0 + a_1 * x_1' > > y = sympy.sympify(formula) > > fx = f_x = sympy.lambdify([x, a], y, modules='numpy') > > a = numpy.linspace(0.5, 1.0, n) > > print('function value=', fx(*[X, a])) # does not work on 3.3 > > > gives with 3.3 > > print('function value=', fx(*[X, a])) > > TypeError: <lambda>() missing 2 required positional arguments: 'a_0' and > 'a_1' > > > and the same for a variation without * > > print('function value=', fx(X, a)) > TypeError: <lambda>() missing 2 required positional arguments: 'a_0' and > 'a_1' > > So still all help and explanations welcome! > Cheers, Janwillem > > > On Tuesday, 7 January 2014 11:04:30 UTC+1, Janwillem van Dijk wrote: >> >> I have a SymPy script with a.o. >> >> f_mean = lambdify([mu, sigma], mean, modules='numpy') >> >> >> where mean is a function of mu and sigma and mu and sigma are both arrays >> >> mu = symbols('mu_0:%d' % n, real=True, bounded=True) >> >> sigma = symbols('sigma_0:%d' % n, positive=True, real=True, bounded=True) >> >> >> Under Python 2.7.5+ SymPy 0.12.0 I can use: >> >> y = f_mean(x_n, ux_n) >> >> returning y as a numpy array of size n when x_n and ux_n are both numpy >> arrays of size n. >> >> However, with Python 3.3.2+ and SymPy 0.7.4.1-git I get (for n=5): >> >> y = f_mean(x_n, ux_n) >> TypeError: <lambda>() missing 10 required positional arguments: 'mu_2', >> 'mu_3', 'mu_4', 'mu_5', 'sigma_0', 'sigma_1', 'sigma_2', 'sigma_3', >> 'sigma_4', and 'sigma_5' >> >> >> Which is similar to what I got in Python 2.7 before I added the >> modules=numpy argument >> >> All this on ubuntu 13.10 >> >> >> Have I missed something in the docs or did I stumble on a not yet >> implemented feature? >> >> Any help very welcome.heers, >> >> Cheers, Janwillem >> >> > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/sympy. > For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. For more options, visit https://groups.google.com/groups/opt_out.
