# funzione che, dati due vettori come liste, ne fa il prodotto scalare

def scalare(vettore1, vettore2):
    risultato = 0
    for i in range(len(vettore1)):
        risultato += vettore1[i] * vettore2[i]
    return risultato
    
# funzione che calcola la trasposta

def trasposta(matrice):
    n = len(matrice)
    m = len(matrice[0])
    tras = [[matrice[i][j] for i in range(n)] for j in range(m)]
    return tras

# funzione che calcola il prodotto tra matrici

def prodotto(matrice1, matrice2):
    n = len(matrice1)
    m = len(matrice1[0])
    tras = trasposta(matrice2)
    prod = [[scalare(matrice1[i], tras[j]) for j in range(m)] for i in range(n)]
    return prod