Browse Source

Tidy

master
Pete Shadbolt 10 years ago
parent
commit
a2cf767755
1 changed files with 36 additions and 40 deletions
  1. +36
    -40
      run-tests.py

+ 36
- 40
run-tests.py View File

@@ -1,46 +1,42 @@
import os, sys
import time
import multiprocessing as mp
import numpy as np
import time
from matplotlib import pyplot as plt
from permanent import permanent
import itertools as it


def permanent(a):
""" Slow way to compute the permanent """
r = range(len(a))
return sum([np.prod(a[r, p]) for p in it.permutations(r)])


if __name__ == '__main__':
maxtime=1
dimensions=range(1,11)

for (function, label) in zip((permanent, perm_ryser), ("C", "Python")):
counts=[]
for dimension in dimensions:
print dimension
real=np.random.uniform(-1, 1, dimension*dimension).reshape((dimension, dimension))
imag=np.random.uniform(-1, 1, dimension*dimension).reshape((dimension, dimension))
submatrix=real+1j*imag

t=time.clock()
n=0
while time.clock()-t < maxtime:
for i in range(5):
function(submatrix)
n+=5
counts.append(n)

plt.plot(dimensions, counts, ".-", label=label)

def perm_ryser(a):
''' the permanent calculated using the ryser formula. much faster than the naive approach '''
n,n2=a.shape
z=np.arange(n)
irange=xrange(2**n)
get_index=lambda i: (i & (1 << z)) != 0
get_term=lambda index: ((-1)**np.sum(index))*np.prod(np.sum(a[index,:], 0))
indeces=map(get_index, irange)
terms=map(get_term, indeces)
return np.sum(terms)*((-1)**n)

maxtime=1
dimensions=range(1,11)

for (function, label) in zip((permanent, perm_ryser), ("C", "Python")):
counts=[]
for dimension in dimensions:
print dimension
real=np.random.uniform(-1, 1, dimension*dimension).reshape((dimension, dimension))
imag=np.random.uniform(-1, 1, dimension*dimension).reshape((dimension, dimension))
submatrix=real+1j*imag

t=time.clock()
n=0
while time.clock()-t < maxtime:
for i in range(5):
function(submatrix)
n+=5
counts.append(n)

plt.plot(dimensions, counts, '.-', label=label)

plt.ylabel('Number of permanents per second')
plt.xlabel('Dimension')
plt.xlim(min(dimensions), max(dimensions))
plt.legend()
plt.semilogy()
plt.savefig('out.pdf')
plt.ylabel("Number of permanents per second")
plt.xlabel("Dimension")
plt.xlim(min(dimensions), max(dimensions))
plt.legend()
plt.semilogy()
plt.savefig("out.pdf")

Loading…
Cancel
Save