| 1 | initial version |
You can try using the fast_callable function which converts a symbolic function to a python (or Cython? or C?) function that takes advantage of the fast routines for compute (for example) sin(x) where the input x is a float.
Try:
sage: x,y,z = var('x,y,z')
sage: import numpy as np
sage: X=np.linspace(-1,1,10)
sage: Y,Z=X,X
sage: f(x,y,z)=x^2*sin(y)*z
sage: ff = fast_callable(f, vars=[x,y,z])
sage: ff(1,2,3)
3*sin(2)
sage: ff(X,Y,Z)
array([ 8.41470985e-01, 3.30154145e-01, 9.04347369e-02,
1.21183221e-02, 1.52102371e-04, 1.52102371e-04,
1.21183221e-02, 9.04347369e-02, 3.30154145e-01,
8.41470985e-01])
My first thought was to use fast_float instead, but that doesn't seem to work. Maybe someone more knowledgable can point out why.
| 2 | No.2 Revision |
You can try using the fast_callable function which converts a symbolic function to a python (or Cython? or C?) function that takes advantage of the fast routines for compute (for example) sin(x) where the input x is a float.
Try:
sage: x,y,z = var('x,y,z')
sage: import numpy as np
sage: X=np.linspace(-1,1,10)
sage: Y,Z=X,X
sage: f(x,y,z)=x^2*sin(y)*z
sage: ff = fast_callable(f, vars=[x,y,z])
sage: ff(1,2,3)
3*sin(2)
sage: ff(X,Y,Z)
array([ 8.41470985e-01, 3.30154145e-01, 9.04347369e-02,
1.21183221e-02, 1.52102371e-04, 1.52102371e-04,
1.21183221e-02, 9.04347369e-02, 3.30154145e-01,
8.41470985e-01])
My first thought was to use fast_float instead, but that doesn't seem to work. Maybe someone more knowledgable knowledgeable can point out why.
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.