Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. import numpy
  2. import sys
  3.  
  4. def getMatrixFromFile(fileName):
  5. inputFile = open(fileName, 'r')
  6. return numpy.loadtxt(inputFile)
  7.  
  8. def Strassen(X,Y):
  9. n = len(X)
  10. if n == 2:
  11. return numpy.matrix([[X[0][0]*Y[0][0] + X[0][1]*Y[1][0], X[0][0]*Y[0][1] + X[0][1]*Y[1][1]],
  12. [X[1][0]*Y[0][0] + X[1][1]*Y[1][0], X[1][0]*Y[0][1] + X[1][1]*Y[1][1]]])
  13.  
  14. A = X[0:n/2, 0:n/2]
  15. B = X[0:n/2, n/2:n]
  16. C = X[n/2:n, 0:n/2]
  17. D = X[n/2:n,n/2:n]
  18. E = Y[0:n/2, 0:n/2]
  19. F = Y[0:n/2, n/2:n]
  20. G = Y[n/2:n, 0:n/2]
  21. H = Y[n/2:n,n/2:n]
  22.  
  23. P1 = Strassen(A,F-H)
  24. P2 = Strassen(A+B,H)
  25. P3 = Strassen(C+D,E)
  26. P4 = Strassen(D,G-E)
  27. P5 = Strassen(A+D,E+H)
  28. P6 = Strassen(B-D,G+H)
  29. P7 = Strassen(A-C,E+F)
  30.  
  31. R = numpy.zeros((n,n))
  32. R[0:n/2, 0:n/2] = P5 + P4 - P2 + P6
  33. R[0:n/2, n/2:n] = P1 + P2
  34. R[n/2:n, 0:n/2] = P3 + P4
  35. R[n/2:n,n/2:n] = P1 + P5 - P3 - P7
  36.  
  37. return R
  38.  
  39. def main():
  40. X = getMatrixFromFile(sys.argv[1])
  41. Y = getMatrixFromFile(sys.argv[2])
  42. print (Strassen(X,Y))
  43.  
  44. if __name__ == "__main__":
  45. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement