Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.36 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.         string = ""
  29.         for x in xrange(len(self.matrix) ):
  30.             for y in xrange( len(self.matrix[x]) ):
  31.                 string = string + str( self.matrix[x][y] ) + "\t"
  32.  
  33.             string = string +  "\n"
  34.         return string
  35.     def read(self,filename):
  36.         """Erstatter matricen med den, som indlæses fra filen filename.
  37.         Jeg går ud fra at jeg får at matricen er giver med tabs som afstand imellem søjlerne og newlines imellem rækkerne (se evt write)"""
  38.         f= open(filename, "r")
  39.         #Jeg benytter mig af readlines() for at optimere indlæsningen af filen.
  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.         return SimpleMatrix(m,n,values)
  49.     def write(self,filename):
  50.         """udskriver matricens værdier til filen filename på en måde, som kan læses af read(filename)."""
  51.         f = open(filename, "w+")
  52.         string = ""
  53.         print self
  54.         for line in self.matrix:
  55.             for element in line:
  56.                 string =string + str(element)+ "\t"
  57.             string = string + "\n"
  58.         f.write(string)
  59.     def __add__(self,other):
  60.         """som elementvis adderer 2 matricer af samme størrelse.
  61.         Denne metode bruger + operatoren imellem to matricer"""
  62.         if self.rows == other.rows and self.columns == other.columns:
  63.             sum_values = []
  64.             for x in range(self.rows):
  65.                 for y in range(self.columns):
  66.                     sum_values.append(self.matrix[x][y] + other.matrix[x][y])
  67.             self = SimpleMatrix(self.rows,self.columns,sum_values)
  68.             return self
  69.            
  70.         else:
  71.             raise ValueError("I can't add these matrices, because they're not the same size.")
  72.     def __mul__(self,other):
  73.         """multiplicerer 2 matricer når antallet af søjler i den første er lig antallet af rækker i den næste.
  74.         Denne metode bruger * operatoren imellem 2 matricer"""
  75.         if self.columns == other.rows :
  76.             colself = []
  77.             rowother = other.matrix
  78.             a= self.columns
  79.             b= other.rows
  80.            
  81.             mulmatrix  = SimpleMatrix(a,b)
  82.  
  83.             for x in xrange(mulmatrix.rows):
  84.                 for y in xrange(mulmatrix.columns):
  85.                     counter =0
  86.                     for z in xrange(self.rows):
  87.                         counter += self.matrix[z][y]*other.matrix[x][z]
  88.                     mulmatrix.matrix[x][y] = counter
  89.             return mulmatrix
  90.         else:
  91.             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")
  92.     def __eq__(self,other):
  93.         """Sammenligner 2 matricer af samme dimension og returnerer True,hvis og kun hvis alle elementer er ens, ellers returneres False. Denne metode overskriver sammenligningsoperatoren ==."""
  94.  
  95.         if self.rows == other.rows and self.columns==other.columns:
  96.             for x in xrange(self.rows):
  97.                 for y in xrange(self.columns):
  98.                     if self.matrix[x][y] != other.matrix[x][y]:
  99.                         return False
  100.             return True
  101.         else:
  102.             return False
  103.     def __ne__(self,other):
  104.         """Sammenligner 2 matricer af samme dimension og returnerer False, hvis og kun hvis alle elementer er ens, ellers returneres True
  105.         Denne metode overskriver sammenligningsoperatoren !=."""
  106.         if self.rows == other.rows and self.columns==other.columns:
  107.             for x in xrange(self.rows):
  108.                 for y in xrange(self.columns):
  109.                     if self.matrix[x][y] != other.matrix[x][y]:
  110.                         return True
  111.             return False
  112.         else:
  113.             return True
  114.  
  115. def test():
  116.  
  117.     print  "Hver gang en matrix printes er det et udtryk for at __str__ virker. \n"
  118.    
  119.     print"test af __init__"
  120.     nulmatrix = SimpleMatrix()
  121.     print nulmatrix
  122.     mnmatrix = SimpleMatrix(2,2)
  123.     print mnmatrix
  124.     numbers=[1,2,3,4,5,6,7,8,9]
  125.     valuesmatrix = SimpleMatrix(3,3,numbers)
  126.     print valuesmatrix
  127.     print " test af __add__"
  128.     A = SimpleMatrix(2 ,2, [1,2,3,4])
  129.     B = SimpleMatrix(2, 2, [5,6,7,8])
  130.     C = SimpleMatrix(2, 2, [6,8,10,12])
  131.     print A+B
  132.     print C == A+B
  133.    
  134.    
  135.     print "test af __mul__"
  136.     D = SimpleMatrix(3,3, numbers)
  137.    
  138.     E = SimpleMatrix(3, 2, [6,8,10,12])
  139.     F = SimpleMatrix(2, 3, [6,8,10,12])
  140.     print E
  141.     print F*E
  142.    
  143.     print "test af write(filename)"
  144.     writetest = D
  145.     writetest.write("testmatrix.txt")
  146.     print "test af read(filename)"
  147.     readtest = SimpleMatrix()
  148.     print readtest.read("testmatrix.txt")
  149.    
  150.     print "test af __eq__"
  151.     G = SimpleMatrix(3,3, [8,2,3,4,5,6,7,8,9])
  152.     print D == D
  153.     print D== G
  154.     print "test af __ne__"
  155.     print D != D
  156.     print D != G
  157. print test
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement