import math,random
class Matrix():
"""this module is used to work with matrices"""
def __init__(self,matrix):
self.matrix =[[]]
self.rows = 0
self.colums = 0
self.size = 0
is_matrix = False
is_same_dimention = False
for row in range(len(matrix)):
if type(matrix[row]) == type([]):
is_matrix = True
continue
else:
is_matrix = False
break
if is_matrix == True:
self.matrix = matrix
self.rows = len(self.matrix)
self.colums = len(self.matrix[0])
self.size = self.rows * self.colums
def get_rows(self):
"""returns the number of rows in a matrix"""
return self.rows
def get_colums(self):
"""returns number of cols a matrix has"""
return self.colums
def get_order(self):
"""returns the dimensions of the matrix"""
return str(self.rows) +"x"+str(self.colums)
def add_matrix(self,matrix):
"""adds two matrices together"""
matrix2 =[[0] *self.colums for i in range(self.rows)]
for row in range(len(self.matrix)):
for colum in range(len(self.matrix[0])):
matrix2[row][colum]=self.matrix[row][colum] + matrix[row][colum]
return matrix2
def subtract_matrices(self,matrix):
"""subtracts two matrices and returns the result"""
matrix2 =[[0] *self.colums for i in range(self.rows)]
for row in range(len(self.matrix)):
for colum in range(len(self.matrix[0])):
matrix2[row][colum]=self.matrix[row][colum] - matrix[row][colum]
return matrix2
def multiply_by(self,num):
"""multiplies the matrix by the specified num"""
matrix2 =[[0] *self.colums for i in range(self.rows)]
for row in range(len(self.matrix)):
for colum in range(len(self.matrix[0])):
matrix2[row][colum]=self.matrix[row][colum] * num
return matrix2
def get_Matrix(self):
"""returns the matrix"""
return self.matrix
def get_row_at(self,index):
return self.matrix[index]
def get_matrix(self):
"""this method returns the matrix"""
return self.matrix
def sort_matrix(self):
"""this metjod sorts the matrix in acending order"""
for i in range(len(self.matrix)):
self.matrix[i]=sorted(self.matrix[i])
def get_element(self,row,colum):
"""this method returns the element at a specific index"""
return self.matrix[row-1][colum-1]
def get_square_elements(self):
"""this method returns all elements in the matrix that are perfect square numbers"""
squares =[]
for row in range(len(self.matrix)):
for colum in range(len(self.matrix[0])):
s = math.sqrt(self.matrix[row][colum])
if s * s == self.matrix[row][colum]:
squares.append(self.matrix[row][colum])
return squares
def multiply(self,matrix):
result =[[0]* self.colums for i in range(self.rows)]
#loop through the rows of self.matrix
for row1 in range(len(self.matrix)):
#iterate through the colums of matrix
for colum1 in range(len(self.matrix[0])):
#iterate through the rows of matrix
for row2 in range(len(matrix)):
result[row1][colum1] += self.matrix[row1][row2] * matrix[row2][colum1]
return result
def generate_matrix(self,row,colums,ranges = range(0,50)):
"""this method returns a generated matrix"""
try:
matrix =[[0]* colums for i in range(row)]
r = list(ranges)
for row in range(len(matrix)):
for colum in range(len(matrix[0])):
matrix[row][colum] = random.randrange(len(r))
except TypeError:
print("invalid argument ",ranges)
else:
return matrix
def find_determinant(self):
"""returns the determinant of 2x2 matrix"""
if self.rows == 2 and self.colums == 2:
return (self.matrix[0][0] * self.matrix[1][-1]) - (self.matrix[0][1]* self.matrix[1][0])
def decode_matrix(self):
"""this method decodes a hidden .essage in a matrix"""
decoded = []
code_alphabets = dict()
alphabets ="A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split(" ")
i = 1
#adds letters and associate code numbers to the code_alphabets dictionary"""
for letter in alphabets:
if letter not in code_alphabets.keys():
code_alphabets.setdefault(i,letter)
i+=1
#loops through matrix and searches for a match in dictionary"""
for row in range(len(self.matrix)):
for colum in range(len(self.matrix[row])):
"""checks wether the number is in the dictionary"""
if self.matrix[row][colum] in code_alphabets.keys():
value = self.matrix[row][colum]
decoded.append(code_alphabets[value])
else:
return None
return str(decoded)
def encode_matrix(self):
"""encodes the matrix"""