<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def build_agg_matrix(agg_vector, pos_dict=None):
 """ Agg. matrix based on mapping given in input as numerical or str vector. The aggregation matrix has the from nxm with -n new classificaction -m old classification Parameters agg_vector : list or vector like numpy ndarray This can be row or column vector. Length m with position given for n and -1 if values should not be included or length m with id_string for the aggregation pos_dict : dictionary (only possible if agg_vector is given as string) output order for the new matrix must be given as dict with 'string in agg_vector' = pos (as int, -1 if value should not be included in the aggregation) Example 1: input vector: np.array([0, 1, 1, 2]) or ['a', 'b', 'b', 'c'] agg matrix: m0 m1 m2 m3 n0 1 0 0 0 n1 0 1 1 0 n2 0 0 0 1 Example 2: input vector: np.array([1, 0, 0, 2]) or (['b', 'a', 'a', 'c'], dict(a=0,b=1,c=2)) agg matrix: m0 m1 m2 m3 n0 0 1 1 0 n1 1 0 0 0 n2 0 0 0 1 """

    if isinstance(agg_vector, np.ndarray):
        agg_vector = agg_vector.flatten().tolist()

    if type(agg_vector[0]) == str:
        str_vector = agg_vector
        agg_vector = np.zeros(len(str_vector))
        if pos_dict:
            if len(pos_dict.keys()) != len(set(str_vector)):
                raise ValueError(
                    'Posistion elements inconsistent with aggregation vector')
            seen = pos_dict
        else:
            seen = {}
        counter = 0
        for ind, item in enumerate(str_vector):
            if item not in seen:
                seen[item] = counter
                counter += 1
            agg_vector[ind] = seen[item]

    agg_vector = np.array(agg_vector, dtype=int)
    agg_vector = agg_vector.reshape((1, -1))
    row_corr = agg_vector
    col_corr = np.arange(agg_vector.size)

    agg_matrix = np.zeros((row_corr.max()+1, col_corr.max()+1))
    agg_matrix[row_corr, col_corr] = 1

    # set columns with -1 value to 0
    agg_matrix[np.tile(agg_vector == -1, (np.shape(agg_matrix)[0], 1))] = 0

    return agg_matrix