Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Matrix:
- __doc__= """Uma classe de matrizes em Python. Criar uma variável 'matrix' por:
- A=Matrix( lista de linhas )
- Por exemplo A=Matrix([[1,0],[0,1]]) criará uma matriz cujas linhas são [1,0] e [0,1], i.e. a
- matriz da unidade 2x2.
- Atributos de uma variável da classe Matrix:
- matrix : contém a matriz em forma de listas de linhas
- rows: número de linhas da matriz
- cols: número de colunas da matriz
- No exemplo: A.matrix tem valor [[1,0],[0,1]]; A.rows e A.cols têm ambas o valor 2"""
- def __GetDimensions__(self,M):
- rows=len(M)
- cols=len(M[0])
- # Temos de verificar que todas as linhas têm o mesmo número de colunas
- invalid=([len(x) for x in M].count(cols)!=rows)
- return (invalid,rows,cols)
- def __init__(self, M):
- dimensoes=self.__GetDimensions__(M)
- if dimensoes[0]==True:
- print "Matriz nao valida"
- else:
- self.matrix=M
- self.rows=dimensoes[1]
- self.cols=dimensoes[2]
- def AddLine(self,i,j):
- """AddLine(i,j) soma a linha j à linha i (módulo 2)"""
- self.matrix[i]=[ (self.matrix[i][k]+self.matrix[j][k])%2 for k in range(0,self.cols)]
- def ExchangeLine(self,i,j):
- """ExchangeColumn(i,j) trocar as linhas i e j"""
- L=self.matrix[i]
- self.matrix[i]=self.matrix[j]
- self.matrix[j]=L
- def ExchangeColumn(self,u,v):
- """ExchangeColumn(u,v) trocar as colunas u e v"""
- for k in range(0,self.rows):
- h=self.matrix[k][u]
- self.matrix[k][u]=self.matrix[k][v]
- self.matrix[k][v]=h
- def __GetPivotElement__(self,i):
- for l in range(i,self.cols):
- for k in range(i,self.rows):
- if self.matrix[k][l]!=0:
- return (k,l)
- return (self.rows,self.cols)
- def GetRow(self,n):
- """GetRow(n) devolve a n-esima linha da matriz (na forma de um vector=lista)"""
- return self.matrix[n]
- def GetColumn(self,n):
- """GetColum(n) devolve a n-esima coluna da matriz (na forma de um vector=lista)"""
- return [self.matrix[k][n] for k in range(0,self.rows)]
- def GetColumns(self,lista):
- """GetColumns(L) devolve a matriz das colunas indexadas pela lista L.
- Por exemplo A.GetColumns([1,3,5]) devolve a matriz formada pelas colunas 1,3 e 5 da matriz A"""
- return Matrix([self.GetColumn(i) for i in lista])
- def Transpose(self):
- """Transpose(): devolve a matriz transposta da matriz"""
- return Matrix([self.GetColumn(i) for i in range(0,self.cols)])
- def Rank(self):
- """Rank() calcula a caracteristica da matriz visto como matriz binária."""
- import copy
- cpy=copy.deepcopy(self.matrix)
- n=min(self.rows,self.cols)
- for i in range(0,n):
- p=self.__GetPivotElement__(i)
- if p!=(self.rows,self.cols):
- self.ExchangeLine(i,p[0])
- self.ExchangeColumn(i,p[1])
- for k in range(i+1,self.rows):
- if self.matrix[k][i]!=0: self.AddLine(k,i)
- else: i=n
- rg=sum([self.matrix[i][i] for i in range(0,n)])
- self.matrix=cpy
- return rg
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement