histogram/test/speed_numpy.py.in
2017-02-14 00:12:12 +00:00

121 lines
3.4 KiB
Python
Executable File

#!@PYTHON_EXECUTABLE@
##
## Copyright 2015-2016 Hans Dembinski
##
## Distributed under the Boost Software License, Version 1.0.
## (See accompanying file LICENSE_1_0.txt
## or copy at http://www.boost.org/LICENSE_1_0.txt)
import numpy as np
from timeit import default_timer as timer
from histogram import histogram, regular_axis
def compare_1d(n, distrib):
if distrib == 0:
r = np.random.rand(n)
else:
r = 0.3 * np.random.randn(n)
best_numpy = float("infinity")
best_boost = float("infinity")
for k in xrange(50):
t = timer()
w, xe = np.histogram(r, bins=100, range=(0.0, 1.0))
t = timer() - t
best_numpy = min(t, best_numpy)
h = histogram(regular_axis(100, 0, 1))
t = timer()
h.fill(r)
t = timer() - t
best_boost = min(t, best_boost)
assert(np.all(w == np.array(h)[:-2]))
print "python:numpy %.3f" % best_numpy
print "python:hd_sd %.3f" % best_boost
def compare_3d(n, distrib):
if distrib == 0:
r = np.random.rand(3 * n)
else:
r = 0.3 * np.random.randn(3 * n)
r = r.reshape(n, 3)
best_numpy = float("infinity")
best_boost = float("infinity")
for k in xrange(50):
t = timer()
w, xe = np.histogramdd(r, bins=(100, 100, 100),
range=((0.0, 1.0),
(0.0, 1.0),
(0.0, 1.0)))
t = timer() - t
best_numpy = min(t, best_numpy)
h = histogram(regular_axis(100, 0, 1),
regular_axis(100, 0, 1),
regular_axis(100, 0, 1))
t = timer()
h.fill(r)
t = timer() - t
best_boost = min(t, best_boost)
assert(np.all(w == np.array(h)[:-2,:-2,:-2]))
print "python:numpy %.3f" % best_numpy
print "python:hd_sd %.3f" % best_boost
def compare_6d(n, distrib):
if distrib == 0:
r = np.random.rand(6 * n)
else:
r = 0.3 * np.random.randn(6 * n)
r = r.reshape(n, 6)
best_numpy = float("infinity")
best_boost = float("infinity")
for k in xrange(50):
t = timer()
w, xe = np.histogramdd(r, bins=(10, 10, 10,
10, 10, 10),
range=((0.0, 1.0),
(0.0, 1.0),
(0.0, 1.0),
(0.0, 1.0),
(0.0, 1.0),
(0.0, 1.0)))
t = timer() - t
best_numpy = min(t, best_numpy)
h = histogram(regular_axis(10, 0, 1),
regular_axis(10, 0, 1),
regular_axis(10, 0, 1),
regular_axis(10, 0, 1),
regular_axis(10, 0, 1),
regular_axis(10, 0, 1))
t = timer()
h.fill(r)
t = timer() - t
best_boost = min(t, best_boost)
assert(np.all(w == np.array(h)[:-2,:-2,:-2,:-2,:-2,:-2]))
print "python:numpy %.3f" % best_numpy
print "python:hd_sd %.3f" % best_boost
print "1D"
print "uniform distribution"
compare_1d(12000000, 0)
print "normal distribution"
compare_1d(12000000, 1)
print "3D"
print "uniform distribution"
compare_3d(4000000, 0)
print "normal distribution"
compare_3d(4000000, 1)
print "6D"
print "uniform distribution"
compare_6d(2000000, 0)
print "normal distribution"
compare_6d(2000000, 1)