Skip to content

Instantly share code, notes, and snippets.

@andreuinyu
Created October 13, 2017 19:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andreuinyu/0e7ffab521ac2f34bccecdce70b87afe to your computer and use it in GitHub Desktop.
Save andreuinyu/0e7ffab521ac2f34bccecdce70b87afe to your computer and use it in GitHub Desktop.
from random import gauss
class Matriu:
def __init__(self, files, columnes):
self.f = files
self.c = columnes
self.matriu = [None] * files
for i in range(0, files):
self.matriu[i] = [0] * columnes
def __repr__(self):
s = ""
for fila in self.matriu:
for i in fila:
s += str(i) + " "
s = s[:-2]
s += "\n"
return s
def aleatoritza(self):
for i in range(0, self.f):
for j in range(0, self.c):
self.matriu[i][j] = gauss(1, 1)
def allista(self):
ll = []
for i in range(0, self.f):
for j in range(0, self.c):
ll.append(self.matriu[i][j])
return ll
def tr(self):
# Transposada
resultat = Matriu(self.c, self.f)
for i in range(0, resultat.f):
for j in range(0, resultat.c):
resultat.matriu[i][j] = self.matriu[j][i]
return resultat
def copia(self):
resultat = Matriu(self.f, self.c)
for i in range(0, resultat.f):
for j in range(0, resultat.c):
resultat.matriu[i][j] = self.matriu[i][j]
return resultat
def __add__(self, altre):
if isinstance(altre, Matriu):
for i in range(0, self.f):
for j in range(0, self.c):
self.matriu[i][j] += altre.matriu[i][j]
else:
for i in range(0, self.f):
for j in range(0, self.c):
self.matriu[i][j] += altre
return self
def __sub__(self, altre):
nou_altre = altre * (-1)
return self.__add__(nou_altre)
def __mul__(self, altre):
if isinstance(altre, Matriu):
for i in range(0, self.f):
for j in range(0, self.c):
self.matriu[i][j] *= altre.matriu[i][j]
else:
for i in range(0, self.f):
for j in range(0, self.c):
self.matriu[i][j] *= altre
return self
def map(m, func):
# Aplica una funció donada a cada valor
resultat = Matriu(m.f, m.c)
for i in range(0, resultat.f):
for j in range(0, resultat.c):
resultat.matriu[i][j] = func(m.matriu[i][j])
return resultat
def prod(a, b):
# Producte matricial
if a.c != b.f:
print("Tamanys erronis")
return None
resultat = Matriu(a.f, b.c)
for i in range(0, resultat.f):
for j in range(0, resultat.c):
suma = 0
for k in range(0,a.c):
suma += a.matriu[i][k] * b.matriu[k][j]
resultat.matriu[i][j] = suma
return resultat
def a_matriu(ll):
m = Matriu(len(ll),1)
for i in range(0, len(ll)):
m.matriu[i][0] = ll[i]
return m
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment