-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
I tried to compare symjit, lambdify and ufuncify by evaluation of some senseless function, just complicated enough that evaluation would take some time.
My initial finding are:
- Results seem to be the same up to numerical errors.
- All three can 'broadcast', but
symjitis by far the slowest of the three, much slower than evenlambdify - In this example,
ufuncifyseems almost twixe as fast assymjit
I attached the program below.
# %%
from sympy.utilities.autowrap import ufuncify
import sympy as sm
import numpy as np
from symjit import compile_func
x, y = sm.symbols('x y')
# just some senseless function, complicated enough so evaluation time takes
# some time.
f_ori = (
(sm.Abs(
(sm.sin(sm.sqrt(sm.Abs((sm.cos(sm.asin(sm.sin(sm.sqrt(y**15 + x**20))))
+ sm.exp(sm.log(x**2 + y**2)) +
(sm.log(x**2 + y**2)**10))))))) **(3/7)) + 3.0
)
xs = [2.0, 3.0, 4.0, 8.0, 9.0, 10.0]
ys = [5.0, 6.0, 7.0, 11.0, 12.0, 13.0]
xs1 = np.array([2.0])
ys1 = np.array([5.0])
f_ufunc = ufuncify((x, y), f_ori, backend='Cython')
print('speed ufuncify')
%timeit (f_ufunc(np.array(xs), np.array(ys)))
%timeit (f_ufunc(np.array([xs[0]]), np.array([ys[0]])))
%timeit (f_ufunc(xs1, ys1))
f_lam = sm.lambdify((x, y), f_ori, cse=True)
print('\n')
print('speed lambdify')
%timeit (f_lam(np.array(xs), np.array(ys)))
%timeit (f_lam(xs[0], ys[0]))
%timeit (f_lam(xs1, ys1))
f_jit = compile_func((x, y), f_ori)
print('\n')
print('speed symjit')
%timeit (f_jit(np.array(xs), np.array(ys)))
%timeit (f_jit(xs1, ys1))
%timeit (f_jit(xs[2], ys[2]))
resultat_ufunc = f_ufunc(np.array(xs),np.array(ys))
resultat_lam = f_lam(np.array(xs), np.array(ys))
resultat_jit = f_jit(np.array(xs), np.array(ys))
print('\n')
print('numerical results')
print('resultat ufuncify:', resultat_ufunc)
print('resultat lambdify:', resultat_lam)
print('resultat symjit:', resultat_jit)
print('\n')
print('differences between results')
print('resultat ufuncify - resultat lambdify:', resultat_ufunc - resultat_lam)
print('resultat ufuncify - resultat symjit:', resultat_ufunc - resultat_jit)
print('resultat lambdify - resultat symjit:', resultat_lam - resultat_jit)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels