def transpose_2d(a):
    """
    Transpose a given matrix using Zip. A 1x4 matrix becomes a 4x1 matrix

    :param a: (list) 2D Matrix to transpose
    :return:  (list) Transposed 2d matrix of a
    """

    # check if given matrix is list
    if type(a) != list:
        raise TypeError('Error xm10: Incorrect type, matrices must be of type "list"')

    # check that rows are of matching length
    l = len(a[0])
    for row in a:
        if len(row) != l:
            raise Exception("Error xm11: Row lengths do not match")

    # return transposed matrix
    return list(map(list, zip(*a)))