Cool
On Wed, Aug 27, 2014 at 8:07 PM, James Crist <[email protected]> wrote: > I still need to do some cleanups and add tests, but I finally have this > working and thought I'd share. I'm really happy with this: > > In [1]: from sympy import * > > In [2]: a, b, c = symbols('a, b, c') > > In [3]: expr = (sin(a) + sqrt(b)*c**2)/2 > > In [4]: from sympy.utilities.autowrap import ufuncify > > In [5]: func = ufuncify((a, b, c), expr) > > In [6]: func(1, 2, 3) > Out[6]: 6.7846965230828769 > > In [7]: func([1, 2, 3, 4, 5], [6, 7, 8, 9, 10], 3) > Out[7]: array([ 11.44343933, 12.36052961, 12.79848207, 13.12159875, > 13.75078733]) > > In [8]: from numpy import arange > > In [9]: a = arange(10).reshape((2, 5)) > > In [10]: c = arange(10, 20).reshape((2, 5)) > > In [11]: b = 25 > > In [12]: func(a, b, c) > Out[12]: > array([[ 250. , 302.92073549, 360.45464871, 422.57056 , > 489.62159875], > [ 562.02053786, 639.86029225, 722.8284933 , 810.49467912, > 902.70605924]]) > > In [13]: type(func) > Out[13]: numpy.ufunc > > This now does everything a numpy `ufunc` does normally, as it *is* a > ufunc. Codegen is hooked up to numpy api. Type conversion and broadcasting > are done automagically. > > Caveats: only functions with a single output are accepted (this could be > changed to accept multi-output without much effort though). Also, as with > all unfuncs, input/outputs must all be scalars (no matrix/Indexed > operations allowed). > > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/76e0fbbe-5ce4-43b7-855b-6ac821f6b8ae%40googlegroups.com > <https://groups.google.com/d/msgid/sympy/76e0fbbe-5ce4-43b7-855b-6ac821f6b8ae%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAJ8oX-EHZXbd5aFFNRy7gJ0hcydpAsG2qxv7Py65DQ9cA9VUUA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
