Advertisement
user_137

Numpy Creates

Oct 16th, 2016
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.19 KB | None | 0 0
  1. from scipy.sparse import diags
  2. def standard(n):
  3.     offsets = np.arange(-(n+1)//2,(n+1)//2+2)
  4.     values = 1/offsets
  5.     values[n//2+1] = 8
  6.     return diags(values,offsets,shape=(n-1,n-1)).toarray()
  7.  
  8. def selectmgrid(n):
  9.     fill = lambda x, y: np.select([x==y, x!=5], [8, 1/(x+y)])
  10.     return fill(*np.mgrid[1:n, 1:n])
  11.  
  12. def vectmgrid(n):
  13.     fill_array = np.vectorize(lambda x, y: 1/(x+y) if x!=y else 8.0)
  14.     return fill_array(*np.mgrid[1:n, 1:n])
  15.  
  16. def mixedmgrid(n):
  17.     fill_it = lambda x, y: 1/(x+y)   # removing the if else statement
  18.     likelihood = fill_it(*np.mgrid[1:n, 1:n])
  19.     np.fill_diagonal(likelihood, 8)
  20.     return likelihood
  21.  
  22. n = 100
  23. # print(standard(n),'\n')
  24. # print(selectmgrid(n),'\n')
  25. # print(vectmgrid(n),'\n')
  26. # print(mixedmgrid(n),'\n')
  27.  
  28. print('standard    ', end='')
  29. %timeit(standard(n))
  30. print('selectmgrid ', end='')
  31. %timeit(selectmgrid(n))
  32. print('vectmgrid   ', end='')
  33. %timeit(vectmgrid(n))
  34. print('mixedmgrid  ', end='')
  35. %timeit(mixedmgrid(n))
  36.  
  37. standard    1000 loops, best of 3: 1.73 ms per loop
  38. selectmgrid 1000 loops, best of 3: 319 µs per loop
  39. vectmgrid   100 loops, best of 3: 2.58 ms per loop
  40. mixedmgrid  1000 loops, best of 3: 209 µs per loop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement