Se le matrici possono avere dimensioni qualsiasi allora ogni funzione inizia con il controllo di compatibilità e poi esegue l’operazione richiesta.
Considera le tre matrici seguenti come parametri attuali nelle chiamate delle funzioni
A = [ [2, 7], [1, 0] ]
B = [ [1, 2], [0, 4] ]
C = [ [1, 8, 9], [0, 5, 9] ]
Prodotto per uno scalare
def scalare(k, m1):
nr=len(m1)
nc=len(m1[0])
m2=[]
for r in range(nr):
riga=[]
for c in range(nc):
riga.append(k*m1[r][c])
m2.append(riga)
return m2
print(scalare(2, A)) # [ [4, 14], [2, 0] ]
print(scalare(2, B)) # [ [2, 4], [0, 8] ]
print(scalare(2, C)) # [ [2, 16, 18], [0, 10, 18] ]
Somma
def somma(m1, m2):
nr1=len(m1)
nc1=len(m1[0])
nr2=len(m2)
nc2=len(m2[0])
if(nr1 != nr2) or (nc1 != nc2):
return None
m3=[]
for r in range(nr1):
riga=[]
for c in range(nc1):
riga.append(m1[r][c]+m2[r][c])
m3.append(riga)
return m3
print(somma(matA, matB)) # [ [3, 9], [1, 4] ]
print(somma(matA, matC)) # None
print(somma(matB, matC)) # None
Prodotto
def prodotto(m1, m2):
nr1=len(m1)
nc1=len(m1[0])
nr2=len(m2)
nc2=len(m2[0])
if(nc1 != nr2):
return None
m3=[]
for r in range(nr1):
riga=[]
for c in range(nc1):
x=0
for k in range(nc1):
x += m1[r][k]*m2[k][c]
riga.append(x)
m3.append(riga)
return m3
print(prodotto(A, B)) # [ [2, 32] , [1, 2] ]
print(prodotto(A, C)) # [ [2, 51, 81], [1, 8, 9] ]
print(prodotto(B, C)) # [ [1, 18, 27], [0, 20, 36] ]
print(prodotto(C, A)) # None
Se il secondo argomento è un vettore colonna (una matrice n x 1…) scrivilo come vettore di vettori: [ [1], [2], [3] ]
Matrice nulla
Crea una matrice piena di zeri di dimensione nr x nc
def nulla(nr, nc):
m=[]
for r in range(nr):
riga=nc*[0]
m.append(riga)
return m
Utilizza la matrice nulla come griglia da riempire successivamente
Prodotto per uno scalare
def scalare(k, m1):
nr=len(m1)
nc=len(m1[0])
m2=nulla(nr, nc)
for r in range(nr):
for c in range(nc):
m2[r][c]=k*m1[r][c]
return m2
print(scalare(2, A)) # [ [4,14], [2, 0] ]
print(scalare(2, B)) # [ [2, 4], [0, 8] ]
print(scalare(2, C)) # [ [2, 16, 18], [0, 10, 18] ]
Somma
def somma(m1, m2):
nr1=len(m1)
nc1=len(m1[0])
nr2=len(m2)
nc2=len(m2[0])
if(nr1 != nr2) or (nc1 != nc2):
return None
m3=nulla(nr1, nc1)
for r in range(nr1):
for c in range(nc1):
m3[r][c]=m1[r][c]+m2[r][c]
return m3
print(somma(A, B)) # [[3, 9], [1, 4]]
print(somma(A, C)) # None
print(somma(B, C)) # None
Prodotto
def prodotto(m1, m2):
nr1=len(m1)
nc1=len(m1[0])
nr2=len(m2)
nc2=len(m2[0])
if(nc1 != nr2):
return None
m3=nulla(nr1, nc2)
for r in range(nr1):
for c in range(nc2):
x=0
for k in range(nc1):
x += m1[r][k] * m2[k][c]
m3[r][c]=x
return m3
print(prodotto(A, B)) # [[2,32] , [1,2] ]
print(prodotto(A, C)) # [[2,51,81], [1,8,9] ]
print(prodotto(B, C)) # [[1,18,27], [0,20,36]]
print(prodotto(C, A)) # None