Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from copy import deepcopy
- class MatrixError(BaseException):
- def __init__(self, m1, m2):
- self.matrix1 = m1
- self.matrix2 = m2
- class Matrix:
- def __init__(self, x):
- self.x = deepcopy(x)
- def __str__(self):
- res = ''
- for i in range(len(self.x)):
- for j in range(len(self.x[i])):
- res += str(self.x[i][j])
- if j != len(self.x[i]) - 1:
- res += '\t'
- if i != len(self.x) - 1:
- res += '\n'
- return res
- #size of the matrix
- def size(self):
- return len(self.x), len(self.x[0])
- #Addition
- def __add__(self, m2):
- if self.size() != m2.size():
- raise MatrixError(self, m2)
- else:
- res = Matrix(self.x).x
- for i in range(len(m2.x)):
- for j in range(len(m2.x[0])):
- res[i][j] += m2.x[i][j]
- return Matrix(res)
- #Multiplication
- def __mul__(self, a):
- if type(a) is not int and type(a) is not float:
- if self.size()[1] != a.size()[0]:
- raise MatrixError(self, a)
- else:
- res = []
- i = 0
- while i < self.size()[0]:
- tmp = []
- for j in range(a.size()[1]):
- cur = 0
- for k in range(a.size()[0]):
- cur += self.x[i][k] * a.x[k][j]
- tmp.append(cur)
- i += 1
- res.append(tmp)
- return Matrix(res)
- else:
- res = Matrix(self.x).x
- for i in range(len(res)):
- for j in range(len(res[i])):
- res[i][j] *= a
- return Matrix(res)
- __rmul__ = __mul__
- #Transposition
- def transpose(self):
- res = []
- for j in range(self.size()[1]):
- tmp = []
- for i in range(self.size()[0]):
- tmp.append(self.x[i][j])
- res.append(tmp)
- self.x = res
- return Matrix(res)
- @staticmethod
- def transposed(m):
- res = []
- for j in range(m.size()[1]):
- tmp = []
- for i in range(m.size()[0]):
- tmp.append(m.x[i][j])
- res.append(tmp)
- return Matrix(res)
- #Example
- m = Matrix([[1, 0, 0],[0, 1, 0],[0, 0, 1]])
- m1 = Matrix([[3, 2], [-10, 0], [14, 5]])
- m2 = Matrix([[5, 2, 10], [-0.5, -0.25, 18], [-22, -2.5, -0.125]])
- m3 = Matrix.transposed(m)
- print(5 * m2)
- print(m2 * (120 * m * m1))
- print(m3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement