Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.97 KB | None | 0 0
  1. #encoding: utf-8
  2. import sys
  3. class SimpleMatrix(object):
  4.     """Klassen kan repræsentere en matrix (tabel) med
  5.     m > 0 rækker og n > 0 søjler hvis elementer er reelle tal, samt den tomme 0 × 0 matrix
  6.     med m = n = 0. Klassen skal som minimum have metoderne:"""
  7.     def __init__(self,m=0,n=0,values=[]):
  8.         self.rows = m
  9.         self.columns = n
  10.         """ Laver en matrice ud fra nogen pramerer. hvis der ikke er nogen værdier i values, vil der blive retuneret en 0 matrix á m*n """
  11.         if len(values) > m*n:
  12.              raise ValueError("Values can't be larger than m * n")
  13.                 #print "Values can't be larger than m * n"
  14.         elif len(values)>0:
  15.             self.matrix = [ [0 for i in xrange (n)] for j in xrange(m)]
  16.             var = 0
  17.             for x in xrange(len(self.matrix)):
  18.                 for y in xrange(len(self.matrix[x])):
  19.                     if var< len(values):
  20.                         self.matrix[x][y] = values[var]
  21.                         var = var+1
  22.                     else:
  23.                         self.matrix[x][y]=0        
  24.         else:
  25.             self.matrix = [ [0 for i in xrange (n)] for j in xrange(m)]
  26.     def __str__(self):
  27.         """Returnerer en tegnstreng, der opstiller matricens værdier på tabelform (række for række med linjeskift efter hver række)."""
  28.         #skal return se på str.join
  29.         string = ""
  30.         for x in xrange(len(self.matrix) ):
  31.             for y in xrange( len(self.matrix[x]) ):
  32.                 string = string + str( self.matrix[x][y] ) + "\t"
  33.  
  34.             string = string +  "\n"
  35.         return string
  36.     def read(self,filename):
  37.         """Jeg går ud fra at jeg får en matrice angievet i et række søjle format"""
  38.         f= open(filename, "r")
  39.         #optimering af indlæsning
  40.         lines=f.readlines()
  41.         m = len(lines)
  42.         n = len(lines[0].rstrip("\n").split())
  43.         values = []
  44.         for line in lines:
  45.             line = line.rstrip("\n").split()
  46.             for element in line:
  47.                 values.append(int(element))
  48.  
  49.         #self.__init__(m,n,values)
  50.         return SimpleMatrix(m,n,values)
  51.     def write(self,filename):
  52.         f = open(filename, "w+")
  53.         string = ""
  54.         print self
  55.         for line in self.matrix:
  56.             for element in line:
  57.                 string =string + str(element)+ "\t"
  58.             string = string + "\n"
  59.         f.write(string)
  60.     def __add__(self,other):
  61.         if self.rows == other.rows and self.columns == other.columns:
  62.             sum_values = []
  63.             for x in range(self.rows):
  64.                 for y in range(self.columns):
  65.                     sum_values.append(self.matrix[x][y] + other.matrix[x][y])
  66.                     #self.matrix[x][y] = self.matrix[x][y] + other.matrix[x][y]
  67.             #print sum_values
  68.             self = SimpleMatrix(self.rows,self.columns,sum_values)
  69.             return self
  70.            
  71.         else:
  72.             raise ValueError("I can't add these matrices, because they're not the same size.")
  73.     def __mul__(self,other):
  74.         """multiplicerer 2 matricer når antallet af søjler i den første er lig antallet af rækker i den næste."""
  75.         if self.columns == other.rows :
  76.             colself = []
  77.             rowother = other.matrix
  78.             a= self.columns
  79.             b= other.rows
  80.             # for x in xrange(self.columns):
  81.             #   colself.append([])
  82.             #   for y in xrange(self.rows):
  83.             #       colself[x].append(self.matrix[y][x])
  84.            
  85.             mulmatrix  = SimpleMatrix(a,b)
  86.  
  87.             for x in xrange(mulmatrix.rows):
  88.                 for y in xrange(mulmatrix.columns):
  89.                     counter =0
  90.                     for z in xrange(self.rows):
  91.                         counter += self.matrix[z][y]*other.matrix[x][z]
  92.                     mulmatrix.matrix[x][y] = counter
  93.             return mulmatrix
  94.         else:
  95.             raise ValueError("Matricerne kan ikke multipliceres, da dem første matrices søjle er ikke lig med anallaet af rækker i den anden matrice")
  96.     def __eq__(self,other):
  97.         """Sammenligner 2 matricer af samme dimension og returnerer False, hvis og kun hvis alle elementer er ens, ellers returneres True"""
  98.         if self.rows == other.rows and self.columns==other.columns:
  99.             for x in xrange(self.rows):
  100.                 for y in xrange(self.columns):
  101.                     if self.matrix[x][y] != other.matrix[x][y]:
  102.                         return False
  103.             return True
  104.     def __ne__(self,other):
  105.         if self.rows == other.rows and self.columns==other.columns:
  106.             for x in xrange(self.rows):
  107.                 for y in xrange(self.columns):
  108.                     if self.matrix[x][y] == other.matrix[x][y]:
  109.                         return False
  110.                        
  111.             return True    
  112.  
  113. # Hver gang en matrix printes er det et udtryk for at __str__ virker.
  114.  
  115. print"test af __init__"
  116. nulmatrix = SimpleMatrix()
  117. print nulmatrix
  118. mnmatrix = SimpleMatrix(2,2)
  119. print mnmatrix
  120. numbers=[1,2,3,4,5,6,7,8,9]
  121. valuesmatrix = SimpleMatrix(3,3,numbers)
  122. print valuesmatrix
  123. print " test af __add__"
  124. A = SimpleMatrix(2 ,2, [1,2,3,4])
  125. B = SimpleMatrix(2, 2, [5,6,7,8])
  126. C = SimpleMatrix(2, 2, [6,8,10,12])
  127. print A+B
  128. print C == A+B
  129.  
  130.  
  131. print "test af __mul__"
  132. D = SimpleMatrix(3,3, numbers)
  133.  
  134. E = SimpleMatrix(3, 2, [6,8,10,12])
  135. F = SimpleMatrix(2, 3, [6,8,10,12])
  136. print E
  137. print F*E
  138.  
  139. print "test af read(filename)"
  140. readtest = SimpleMatrix()
  141. print readtest.read("testmatrix.txt")
  142.  
  143. print "test af __eq__"
  144. G = SimpleMatrix(3,3, [8,2,3,4,5,6,8,8,8])
  145. print D == D
  146. print D== G
  147. print "test af __ne__"
  148. print D != D
  149. print D != G
  150. #matricen = SimpleMatrix(3,3,numbers)
  151. #nulmatrix = SimpleMatrix(3,3)
  152. #textfil.SimpleMatrix
  153. #print matricentom
  154. #print matricen + matricen
  155. #print matricen*matricen
  156. #print matricen*nulmatrix
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement