| 
							- import os, sys
 - import time
 - import multiprocessing as mp
 - import numpy as np
 - import lib
 - import time
 - 
 - 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)
 - 
 - dimension=9
 - 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
 - 
 - #print lib.permanent(submatrix), perm_ryser(submatrix)
 - 
 - #sys.exit(0)
 - #t=time.clock()
 - #for i in range(1000):
 -     #perm_ryser(submatrix)
 - #t1=time.clock()-t
 - 
 - t=time.clock()
 - for i in range(1000):
 -     lib.permanent(submatrix)
 - t2=time.clock()-t
 - print t2
 - 
 - #print t1/t2
 
 
  |