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.

Reply via email to