123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- # Benchmark to compare the times for computing expressions by using
- # eval() on bcolz/numpy arrays. Numexpr is needed in order to
- # execute this.
- import math
- from time import time
- import numpy as np
- import numexpr as ne
- import bcolz
- def compute_bcolz(sexpr, clevel, vm):
- # Uncomment the next for disabling threading
- # bcolz.set_nthreads(1)
- #bcolz.blosc_set_nthreads(1)
- print("*** bcolz (using compression clevel = %d):" % clevel)
- x = cx # comment this for using numpy arrays in inputs
- t0 = time()
- cout = bcolz.eval(sexpr, vm=vm, cparams=bcolz.cparams(clevel))
- print("Time for bcolz.eval (%s) --> %.3f" % (vm, time() - t0,))
- #print(", cratio (out): %.1f" % (cout.nbytes / float(cout.cbytes)))
- #print("cout-->", repr(cout))
- if __name__ == "__main__":
- N = 1e8 # the number of elements in x
- clevel = 3 # the compression level
- sexpr = "(x+1)<0"
- sexpr = "(((.25*x + .75)*x - 1.5)*x - 2)<0"
- # sexpr = "(((.25*x + .75)*x - 1.5)*x - 2)"
- doprofile = 0
- print("Creating inputs...")
- x = np.arange(N)
- #x = np.linspace(0,100,N)
- cx = bcolz.carray(x, cparams=bcolz.cparams(clevel))
- print("Evaluating '%s' with 10^%d points" % (sexpr, int(math.log10(N))))
- t0 = time()
- cout = ne.evaluate(sexpr)
- print("Time for numexpr --> %.3f" % (time() - t0,))
- if doprofile:
- import pstats
- import cProfile as prof
- prof.run('compute_bcolz(sexpr, clevel=clevel, vm="numexpr")',
- #prof.run('compute_bcolz(sexpr, clevel=clevel, vm="python")',
- 'eval.prof')
- stats = pstats.Stats('eval.prof')
- stats.strip_dirs()
- stats.sort_stats('time', 'calls')
- stats.print_stats(20)
- else:
- compute_bcolz(sexpr, clevel=clevel, vm="numexpr")
- #compute_bcolz(sexpr, clevel=clevel, vm="python")
|