numpy.hstack and numpy.vstack are typically used for concatenation of numpy arrays. I typically use it and the * for passing lots of args into lambdify.
Jason moorepants.info +01 530-601-9791 On Sun, Jan 12, 2014 at 5:04 PM, Aaron Meurer <asmeu...@gmail.com> wrote: > 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 > <jwe.van.d...@gmail.com> 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 sympy+unsubscr...@googlegroups.com. > > To post to this group, send email to sympy@googlegroups.com. > > 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 sympy+unsubscr...@googlegroups.com. > To post to this group, send email to sympy@googlegroups.com. > 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 sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at http://groups.google.com/group/sympy. For more options, visit https://groups.google.com/groups/opt_out.