Kaynağa Gözat

Tidy

master
Pete Shadbolt 9 yıl önce
ebeveyn
işleme
a2cf767755
1 değiştirilmiş dosya ile 36 ekleme ve 40 silme
  1. +36
    -40
      run-tests.py

+ 36
- 40
run-tests.py Dosyayı Görüntüle

@@ -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")

Yükleniyor…
İptal
Kaydet