mirror of
https://github.com/boostorg/histogram.git
synced 2025-05-12 05:31:51 +00:00
156 lines
4.3 KiB
Python
Executable File
156 lines
4.3 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
|
|
from histogram.axis import regular
|
|
|
|
def compare_1d(n, distrib):
|
|
if distrib == 0:
|
|
r = np.random.rand(n)
|
|
else:
|
|
r = 0.5 + 0.3 * np.random.randn(n)
|
|
|
|
best_numpy = float("infinity")
|
|
best_boost = float("infinity")
|
|
for k in xrange(20):
|
|
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(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 "py:numpy %.3f" % best_numpy
|
|
print "py:hd_sd %.3f" % best_boost
|
|
|
|
def compare_2d(n, distrib):
|
|
if distrib == 0:
|
|
r = np.random.rand(n)
|
|
else:
|
|
r = 0.5 + 0.3 * np.random.randn(n)
|
|
r = r.reshape(2, n/2)
|
|
|
|
best_numpy = float("infinity")
|
|
best_boost = float("infinity")
|
|
for k in xrange(20):
|
|
t = timer()
|
|
w, xe, ye = np.histogram2d(r[0], r[1], bins=(100, 100),
|
|
range=((0.0, 1.0), (0.0, 1.0)))
|
|
t = timer() - t
|
|
best_numpy = min(t, best_numpy)
|
|
|
|
h = histogram(regular(100, 0, 1), regular(100, 0, 1))
|
|
t = timer()
|
|
h.fill(r[0], r[1])
|
|
t = timer() - t
|
|
best_boost = min(t, best_boost)
|
|
assert(np.all(w == np.array(h)[:-2,:-2]))
|
|
|
|
print "py:numpy %.3f" % best_numpy
|
|
print "py:hd_sd %.3f" % best_boost
|
|
|
|
def compare_3d(n, distrib):
|
|
if distrib == 0:
|
|
r = np.random.rand(n)
|
|
else:
|
|
r = 0.3 * np.random.randn(n)
|
|
r = r.reshape(3, n/3)
|
|
|
|
best_numpy = float("infinity")
|
|
best_boost = float("infinity")
|
|
for k in xrange(20):
|
|
t = timer()
|
|
w, xe = np.histogramdd(r.T, 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(100, 0, 1),
|
|
regular(100, 0, 1),
|
|
regular(100, 0, 1))
|
|
t = timer()
|
|
h.fill(r[0], r[1], r[2])
|
|
t = timer() - t
|
|
best_boost = min(t, best_boost)
|
|
assert(np.all(w == np.array(h)[:-2,:-2,:-2]))
|
|
|
|
print "py:numpy %.3f" % best_numpy
|
|
print "py:hd_sd %.3f" % best_boost
|
|
|
|
def compare_6d(n, distrib):
|
|
if distrib == 0:
|
|
r = np.random.rand(n)
|
|
else:
|
|
r = 0.3 * np.random.randn(n)
|
|
r = r.reshape(6, n/6)
|
|
|
|
best_numpy = float("infinity")
|
|
best_boost = float("infinity")
|
|
for k in xrange(20):
|
|
t = timer()
|
|
w, xe = np.histogramdd(r.T, 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(10, 0, 1),
|
|
regular(10, 0, 1),
|
|
regular(10, 0, 1),
|
|
regular(10, 0, 1),
|
|
regular(10, 0, 1),
|
|
regular(10, 0, 1))
|
|
t = timer()
|
|
h.fill(r[0], r[1], r[2], r[3], r[4], r[5])
|
|
t = timer() - t
|
|
best_boost = min(t, best_boost)
|
|
assert(np.all(w == np.array(h)[:-2,:-2,:-2,:-2,:-2,:-2]))
|
|
|
|
print "py:numpy %.3f" % best_numpy
|
|
print "py:hd_sd %.3f" % best_boost
|
|
|
|
nfill = 6000000
|
|
|
|
print "1D"
|
|
print "uniform distribution"
|
|
compare_1d(nfill, 0)
|
|
print "normal distribution"
|
|
compare_1d(nfill, 1)
|
|
|
|
print "2D"
|
|
print "uniform distribution"
|
|
compare_2d(nfill, 0)
|
|
print "normal distribution"
|
|
compare_2d(nfill, 1)
|
|
|
|
print "3D"
|
|
print "uniform distribution"
|
|
compare_3d(nfill, 0)
|
|
print "normal distribution"
|
|
compare_3d(nfill, 1)
|
|
|
|
print "6D"
|
|
print "uniform distribution"
|
|
compare_6d(nfill, 0)
|
|
print "normal distribution"
|
|
compare_6d(nfill, 1)
|