Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

spectral norm

  • Loading branch information...
commit c004579d86a760f90721aa18b6bfb5d0b3856121 1 parent a7fc8b5
Justin Peel authored
Showing with 59 additions and 0 deletions.
  1. +59 −0 spectral_norm_python.py
View
59 spectral_norm_python.py
@@ -0,0 +1,59 @@
+# The Computer Language Benchmarks Game
+# http://shootout.alioth.debian.org/
+#
+# Contributed by Sebastien Loisel
+# Fixed by Isaac Gouy
+# Sped up by Josh Goldfoot
+# Dirtily sped up by Simon Descarpentries
+# Used list comprehension by Vadim Zelenin
+
+from math import sqrt
+from itertools import izip
+from sys import argv
+
+
+def eval_A(i, j):
+ ij = i+j
+ return 1.0 / (ij * (ij + 1) / 2 + i + 1)
+
+def eval_A_times_u(u):
+ local_eval_A = eval_A
+
+ return [ sum([ local_eval_A(i, j) * u_j
+ for j, u_j in enumerate(u)
+ ]
+ )
+ for i in xrange(len(u))
+ ]
+
+def eval_At_times_u(u):
+ local_eval_A = eval_A
+
+ return [ sum([ local_eval_A(j, i) * u_j
+ for j, u_j in enumerate(u)
+ ]
+ )
+ for i in xrange(len(u))
+ ]
+
+def eval_AtA_times_u(u):
+ return eval_At_times_u(eval_A_times_u(u))
+
+def main():
+ n = int(argv[1])
+ u = [1] * n
+ local_eval_AtA_times_u = eval_AtA_times_u
+
+ for dummy in xrange(10):
+ v = local_eval_AtA_times_u(u)
+ u = local_eval_AtA_times_u(v)
+
+ vBv = vv = 0
+
+ for ue, ve in izip(u, v):
+ vBv += ue * ve
+ vv += ve * ve
+
+ print "%0.9f" % (sqrt(vBv/vv))
+
+main()
Please sign in to comment.
Something went wrong with that request. Please try again.