summaryrefslogtreecommitdiff
path: root/benchmarks/simpleindex.py
diff options
context:
space:
mode:
Diffstat (limited to 'benchmarks/simpleindex.py')
-rw-r--r--benchmarks/simpleindex.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/benchmarks/simpleindex.py b/benchmarks/simpleindex.py
new file mode 100644
index 000000000..e4e541d96
--- /dev/null
+++ b/benchmarks/simpleindex.py
@@ -0,0 +1,48 @@
+import timeit
+# This is to show that NumPy is a poorer choice than nested Python lists
+# if you are writing nested for loops.
+# This is slower than Numeric was but Numeric was slower than Python lists were
+# in the first place.
+
+N = 30
+
+code2 = r"""
+for k in xrange(%d):
+ for l in xrange(%d):
+ res = a[k,l].item() + a[l,k].item()
+""" % (N,N)
+
+code3 = r"""
+for k in xrange(%d):
+ for l in xrange(%d):
+ res = a[k][l] + a[l][k]
+""" % (N,N)
+
+code = r"""
+for k in xrange(%d):
+ for l in xrange(%d):
+ res = a[k,l] + a[l,k]
+""" % (N,N)
+
+setup3 = r"""
+import random
+a = [[None for k in xrange(%d)] for l in xrange(%d)]
+for k in xrange(%d):
+ for l in xrange(%d):
+ a[k][l] = random.random()
+""" % (N,N,N,N)
+
+numpy_timer1 = timeit.Timer(code, 'import numpy as np; a = np.random.rand(%d,%d)' % (N,N))
+numeric_timer = timeit.Timer(code, 'import MLab as np; a=np.rand(%d,%d)' % (N,N))
+numarray_timer = timeit.Timer(code, 'import numarray.mlab as np; a=np.rand(%d,%d)' % (N,N))
+numpy_timer2 = timeit.Timer(code2, 'import numpy as np; a = np.random.rand(%d,%d)' % (N,N))
+python_timer = timeit.Timer(code3, setup3)
+numpy_timer3 = timeit.Timer("res = a + a.transpose()","import numpy as np; a=np.random.rand(%d,%d)" % (N,N))
+
+print "shape = ", (N,N)
+print "NumPy 1: ", numpy_timer1.repeat(3,100)
+print "NumPy 2: ", numpy_timer2.repeat(3,100)
+print "Numeric: ", numeric_timer.repeat(3,100)
+print "Numarray: ", numarray_timer.repeat(3,100)
+print "Python: ", python_timer.repeat(3,100)
+print "Optimized: ", numpy_timer3.repeat(3,100)