In [73]:
def matrix_mult(a,b):
    '''
    >>> matrix_mult([[3,2],[4,5]], [[1,-1],[-2,-3]])
    [[-1, -9], [-6, -19]]
    
    >>> matrix_mult([[2,0,-1],[3,4,5]], [[4,1],[5,0],[-2,-1]])
    [[10, 3], [22, -2]]
    
    >>> matrix_mult([[1,2,4],[2,1,3]], [[1,2,3],[8,3,2],[2,1,4]])
    [[25, 12, 23], [16, 10, 20]]
    '''
    #assert len(a) == len(b[0])
    mout = []
    
    m = len(a)      # Len of rows (a)
    n = len(b[0])   # Len of cols (b)

    
    for x in range(m):        
        
        colres =[]
        for y in range(n):
            row = [e for e in a[x]]            
            col = [e[y] for e in b]            
            num = sum([q*w for q,w in zip(row, col)])
            #print(num)
            colres.append(num)            
        
        mout.append(colres)

    return mout

if __name__ == '__main__':
    import doctest
    doctest.testmod()

In [72]:
a = [[3,2],[4,5]]
b = [[1,-1],[-2,-3]]

matrix_mult(a,b)

a = [[1,2,4],[2,1,3]]
b = [[1,2,3],[8,3,2],[2,1,4]]

matrix_mult(a,b)
matrix_mult([[2,0,-1],[3,4,5]], [[4,1],[5,0],[-2,-1]])


Out[72]:
[[10, 3], [22, -2]]