Awesome. I was working on this today but it looks like you've by passed
what I had working. Do you have a PR with this?


Jason
moorepants.info
+01 530-601-9791


On Wed, Aug 27, 2014 at 11:11 PM, Matthew Rocklin <[email protected]>
wrote:

> 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
> <https://groups.google.com/d/msgid/sympy/CAJ8oX-EHZXbd5aFFNRy7gJ0hcydpAsG2qxv7Py65DQ9cA9VUUA%40mail.gmail.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/CAP7f1AieaeoOFtc_S4XPxWOX2jr2zmda9VCRpWpzHMTGLkmHPQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to