Matrici rettangolari

Considera le tre matrici seguenti come parametri attuali nelle chiamate delle funzioni

matA=[ [2,7], 
       [1,0] 
     ]
matB=[ [1,2], 
       [0,4] 
     ]
matC=[ [1,8,9], 
       [0,5,9] 
     ]

Prodotto per uno scalare

def scalare(k, mat):   
    nr=len(mat) 
    nc=len(mat[0]) 
    mm=[]
    for r in range(nr):
        riga=[]
        for c in range(nc):
            x=k*mat[r] 
            riga.append(x)
        mm.append(riga)
    return mm

print(scalare(2, matA)) # [[4,14], 
                        #  [2, 0]]
print(scalare(2, matB)) # [[2, 4], 
                        #  [0, 8]]
print(scalare(2, matC)) # [[2,16,18], 
                        #  [0,10,18]]

Somma

def somma(mat1, mat2): 
    nr1=len(mat1) 
    nc1=len(mat1[0]) 
    nr2=len(mat2) 
    nc2=len(mat2[0]) 
    if(nr1 != nr2) or (nc1 != nc2): return 

    mm=[]
    for r in range(nr1): 
        riga=[]
        for c in range(nc1): 
            x=mat1[r]+mat2[r]
            riga.append(x) 
        mm.append(riga)
    return mm 

print(somma(matA, matB)) # [[3, 9], [1, 4]] 
print(somma(matA, matC)) # None 
print(somma(matB, matC)) # None

Prodotto

def prodotto(mat1, mat2): 
    nr1=len(mat1) 
    nc1=len(mat1[0]) 
    nr2=len(mat2) 
    nc2=len(mat2[0]) 
    if(nc1 != nr2): return 

    mm=[]
    for r in range(nr1):
        riga=[]
        for c in range(nc1):
            x=0
            for k in range(nc1): 
                x += mat1[r][k]*mat2[k]
            riga.append(x) 
        mm.append(riga)
    return mm 


print(prodotto(matA, matB)) # [[2,32] , [1,2] ] 
print(prodotto(matA, matC)) # [[2,51,81], [1,8,9] ] 
print(prodotto(matB, matC)) # [[1,18,27], [0,20,36]] 
print(prodotto(matC, matA)) # None

Matrice nulla

Crea una matrice piena di zeri di dimensione nr x nc

def creaZeri(nr, nc):
    mm=[]
    for r in range(nr):
        riga=nc*[0]
        mm.append(riga)   
    return mm

Utilizza la matrice nulla come griglia da riempire successivamente

Prodotto per uno scalare

def scalare(k, mat):   
    nr=len(mat) 
    nc=len(mat[0]) 

    mm=creaZeri(nr, nc)
    for r in range(nr):
        for c in range(nc):
            mm[r]=k*mat[r] 
    return mm


print(scalare(2, matA)) # [[4,14], 
                        #  [2, 0]] 
print(scalare(2, matB)) # [[2, 4], 
                        #  [0, 8]] 
print(scalare(2, matC)) # [[2,16,18], 
                        #  [0,10,18]]

Somma

def somma(mat1, mat2):   
    nr1=len(mat1)
    nc1=len(mat1[0])
    nr2=len(mat2)
    nc2=len(mat2[0])
    if(nr1 != nr2) or (nc1 != nc2): return   

    mm=creaZeri(nr1, nc1)
    for r in range(nr1):
        for c in range(nc1):
            x=mat1[r]+mat2[r]
            mm[r]=x
    return mm

print(somma(matA, matB)) # [[3, 9], [1, 4]]
print(somma(matA, matC)) # None
print(somma(matB, matC)) # None

Prodotto

def prodotto(mat1, mat2):   
    nr1=len(mat1)
    nc1=len(mat1[0])
    nr2=len(mat2)
    nc2=len(mat2[0])
    if(nc1 != nr2): return

    mm=creaZeri(nr1, nc2)
    for r in range(nr1):
        for c in range(nc2):
            x=0  
            for k in range(nc1):
                x += mat1[r][k]*mat2[k]
            mm[r]=x   
    return mm 

print(prodotto(matA, matB)) # [[2,32]   , [1,2]    ]
print(prodotto(matA, matC)) # [[2,51,81], [1,8,9]  ]
print(prodotto(matB, matC)) # [[1,18,27], [0,20,36]]
print(prodotto(matC, matA)) # None