Matrices
unknown
plain_text
3 years ago
5.2 kB
6
Indexable
Experiment No. 9 : Write a Python Program to compute following computation on matrices : a)Addition of two matrices b)Subtraction of two matrices c)Multiplication of two matrices d)Transpose of a matix ''' import numpy # initializing matrices x = numpy.array([[1, 2], [4, 5]]) y = numpy.array([[7, 8], [9, 10]]) # using add() to add matrices print("The element wise addition of matrix is : ") print(numpy.add(x, y)) # using subtract() to subtract matrices print("The element wise subtraction of matrix is : ") print(numpy.subtract(x, y)) # using dot() to multiply matrices print ("The product of matrices is : ") print (numpy.dot(x,y)) # using "T" to transpose the matrix print("The transpose of given matrix is : ") print(x.T) 10------------------------------------------------------------------------------------------ class Sparse: def __init__(self, rows, columns): self._matrix = [] self._num = 0 self._rows = rows self._columns = columns def __repr__(self): prnt = f"Shape: {self._rows} x {self._columns}\n" for lst in self._matrix: prnt += lst.__repr__() + '\n' prnt += f"Total: {self._num}" return prnt def insert(self, row, column, value): if row < 0 | column < 0 | row >= self._rows | column >= self._columns: raise ValueError("Invalid row or column") if(value == 0): raise ValueError("Zeroes are not included in a sparse matrix") filled = False for i in range(self._num): if(self._matrix[i][0] < row): continue elif(self._matrix[i][0] > row): self._matrix.insert(i, [row, column, value]) self._num += 1 filled = True break elif(self._matrix[i][1] < column): continue elif(self._matrix[i][1] > column): self._matrix.insert(i, [row, column, value]) self._num += 1 filled = True break else: raise ValueError("The position is already filled") if(filled == False): self._matrix.append([row, column, value]) self._num += 1 return def remove(self, row, column): if row < 0 | column < 0 | row >= self._rows | column >= self._columns: raise ValueError("Invalid row or column") for i in range(num): if(self._matrix[i][0] == row | self._matrix[i][1] == column): return pop(i) return None def size(self): return self._num def shape(self): return tuple((self._rows, self._columns)) def display(self): print(self) def add(self, obj): if(isinstance(obj, Sparse) != True): raise TypeError("add() method needs an object of type Sparse") if(self.shape() == obj.shape()): result = Sparse(self._rows, self._columns) else: raise ValueError("Invalid row or columns") i = 0 j = 0 k = 0 while((i < self._num) & (j < obj._num)): if(self._matrix[i][0] < obj._matrix[j][0]): result._matrix.insert(k, self._matrix[i]) k += 1 i += 1 elif(self._matrix[i][0] > obj._matrix[j][0]): result._matrix.insert(k, obj._matrix[j]) k += 1 j += 1 elif(self._matrix[i][1] < obj._matrix[j][1]): result._matrix.insert(k, self._matrix[i]) k += 1 i += 1 elif(self._matrix[i][1] > obj._matrix[j][1]): result._matrix.insert(k, obj._matrix[j]) k += 1 j += 1 else: result._matrix.insert(k, list([self._matrix[i][0], self._matrix[i][1], self._matrix[i][2] + obj._matrix[j][2]])) k += 1 i += 1 j += 1 while(i < self._num): result._matrix.insert(k, self._matrix[i]) k += 1 i += 1 while(j < obj._num): result._matrix.insert(k, obj._matrix[j]) k += 1 j += 1 result._num = k return result def fast_transpose(self): occurrence = [] index = [] for i in range(self._columns): occurrence.append(0) for i in range(self._num): occurrence[self._matrix[i][1]] += 1 index.append(0) for i in range(1, self._columns): index.append(index[i-1] + occurrence[i-1]) result = Sparse(self._columns, self._rows) result._num = self._num for i in range(self._num): result._matrix.append(list()) for i in range(self._num): result._matrix[index[self._matrix[i][1]]] = list([self._matrix[i][1], self._matrix[i][0], self._matrix[i][2]]) index[self._matrix[i][1]] += 1 return result
Editor is loading...