Advertisement
H0_0H

Matrix

Sep 27th, 2023
1,146
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.66 KB | None | 1 0
  1. from copy import deepcopy
  2.  
  3. class MatrixError(BaseException):
  4.     def __init__(self, m1, m2):
  5.         self.matrix1 = m1
  6.         self.matrix2 = m2
  7.  
  8.  
  9. class Matrix:
  10.     def __init__(self, x):
  11.         self.x = deepcopy(x)
  12.    
  13.     def __str__(self):
  14.         res = ''
  15.         for i in range(len(self.x)):
  16.             for j in range(len(self.x[i])):
  17.                 res += str(self.x[i][j])
  18.                 if j != len(self.x[i]) - 1:
  19.                     res += '\t'
  20.             if i != len(self.x) - 1:
  21.                 res += '\n'
  22.         return res
  23.  
  24.     #size of the matrix
  25.     def size(self):
  26.         return len(self.x), len(self.x[0])
  27.  
  28.     #Addition
  29.     def __add__(self, m2):
  30.         if self.size() != m2.size():
  31.             raise MatrixError(self, m2)
  32.         else:
  33.             res = Matrix(self.x).x
  34.             for i in range(len(m2.x)):
  35.                 for j in range(len(m2.x[0])):
  36.                     res[i][j] += m2.x[i][j]
  37.             return Matrix(res)
  38.  
  39.     #Multiplication
  40.     def __mul__(self, a):
  41.         if type(a) is not int and type(a) is not float:
  42.             if self.size()[1] != a.size()[0]:
  43.                 raise MatrixError(self, a)
  44.             else:
  45.                 res = []
  46.                 i = 0
  47.                 while i < self.size()[0]:
  48.                     tmp = []
  49.                     for j in range(a.size()[1]):
  50.                         cur = 0
  51.                         for k in range(a.size()[0]):
  52.                             cur += self.x[i][k] * a.x[k][j]
  53.                         tmp.append(cur)
  54.                     i += 1
  55.                     res.append(tmp)
  56.                 return Matrix(res)
  57.         else:
  58.             res = Matrix(self.x).x
  59.             for i in range(len(res)):
  60.                 for j in range(len(res[i])):
  61.                     res[i][j] *= a
  62.            
  63.             return Matrix(res)
  64.  
  65.     __rmul__ = __mul__
  66.  
  67.     #Transposition
  68.     def transpose(self):
  69.         res = []
  70.         for j in range(self.size()[1]):
  71.             tmp = []
  72.             for i in range(self.size()[0]):
  73.                 tmp.append(self.x[i][j])
  74.             res.append(tmp)
  75.         self.x = res
  76.         return Matrix(res)
  77.  
  78.     @staticmethod
  79.     def transposed(m):
  80.         res = []
  81.         for j in range(m.size()[1]):
  82.             tmp = []
  83.             for i in range(m.size()[0]):
  84.                 tmp.append(m.x[i][j])
  85.             res.append(tmp)
  86.         return Matrix(res)
  87.  
  88. #Example
  89. m = Matrix([[1, 0, 0],[0, 1, 0],[0, 0, 1]])
  90. m1 = Matrix([[3, 2], [-10, 0], [14, 5]])
  91. m2 = Matrix([[5, 2, 10], [-0.5, -0.25, 18], [-22, -2.5, -0.125]])
  92. m3 = Matrix.transposed(m)
  93. print(5 * m2)
  94. print(m2 * (120 * m * m1))
  95. print(m3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement