msaf/algorithms/fmc2d/utils_2dfmc.py
def resample_mx(X, incolpos, outcolpos):
    """
    Y = resample_mx(X, incolpos, outcolpos)
    X is taken as a set of columns, each starting at 'time'
    colpos, and continuing until the start of the next column.
    Y is a similar matrix, with time boundaries defined by
    outcolpos.  Each column of Y is a duration-weighted average of
    the overlapping columns of X.
    2010-04-14 Dan Ellis dpwe@ee.columbia.edu  based on samplemx/beatavg
    -> python: TBM, 2011-11-05, TESTED
    """
    noutcols = len(outcolpos)
    Y = np.zeros((X.shape[0], noutcols))
    # assign 'end times' to final columns
    if outcolpos.max() > incolpos.max():
        incolpos = np.concatenate([incolpos,[outcolpos.max()]])
        X = np.concatenate([X, X[:,-1].reshape(X.shape[0],1)], axis=1)
    outcolpos = np.concatenate([outcolpos, [outcolpos[-1]]])
    # durations (default weights) of input columns)
    incoldurs = np.concatenate([np.diff(incolpos), [1]])

    for c in range(noutcols):
        firstincol = np.where(incolpos <= outcolpos[c])[0][-1]
        firstincolnext = np.where(incolpos < outcolpos[c+1])[0][-1]
        lastincol = max(firstincol,firstincolnext)
        # default weights
        wts = copy.deepcopy(incoldurs[firstincol:lastincol+1])
        # now fix up by partial overlap at ends
        if len(wts) > 1:
            wts[0] = wts[0] - (outcolpos[c] - incolpos[firstincol])
            wts[-1] = wts[-1] - (incolpos[lastincol+1] - outcolpos[c+1])
        wts = wts * 1. / float(sum(wts))
        Y[:,c] = np.dot(X[:,firstincol:lastincol+1], wts)
    # done
    return Y
def resample_mx(X, incolpos, outcolpos):
    """
    Y = resample_mx(X, incolpos, outcolpos)
    X is taken as a set of columns, each starting at 'time'
    colpos, and continuing until the start of the next column.
    Y is a similar matrix, with time boundaries defined by
    outcolpos.  Each column of Y is a duration-weighted average of
    the overlapping columns of X.
    2010-04-14 Dan Ellis dpwe@ee.columbia.edu  based on samplemx/beatavg
    -> python: TBM, 2011-11-05, TESTED
    """
    noutcols = len(outcolpos)
    Y = np.zeros((X.shape[0], noutcols))
    # assign 'end times' to final columns
    if outcolpos.max() > incolpos.max():
        incolpos = np.concatenate([incolpos,[outcolpos.max()]])
        X = np.concatenate([X, X[:,-1].reshape(X.shape[0],1)], axis=1)
    outcolpos = np.concatenate([outcolpos, [outcolpos[-1]]])
    # durations (default weights) of input columns)
    incoldurs = np.concatenate([np.diff(incolpos), [1]])

    for c in range(noutcols):
        firstincol = np.where(incolpos <= outcolpos[c])[0][-1]
        firstincolnext = np.where(incolpos < outcolpos[c+1])[0][-1]
        lastincol = max(firstincol,firstincolnext)
        # default weights
        wts = copy.deepcopy(incoldurs[firstincol:lastincol+1])
        # now fix up by partial overlap at ends
        if len(wts) > 1:
            wts[0] = wts[0] - (outcolpos[c] - incolpos[firstincol])
            wts[-1] = wts[-1] - (incolpos[lastincol+1] - outcolpos[c+1])
        wts = wts * 1. / float(sum(wts))
        Y[:,c] = np.dot(X[:,firstincol:lastincol+1], wts)
    # done
    return Y
def resample_mx ( X , incolpos , outcolpos ) : noutcols = len ( outcolpos ) Y = np . zeros ( ( X . shape [ 0 ] , noutcols ) ) # assign 'end times' to final columns if outcolpos . max ( ) > incolpos . max ( ) : incolpos = np . concatenate ( [ incolpos , [ outcolpos . max ( ) ] ] ) X = np . concatenate ( [ X , X [ : , - 1 ] . reshape ( X . shape [ 0 ] , 1 ) ] , axis = 1 ) outcolpos = np . concatenate ( [ outcolpos , [ outcolpos [ - 1 ] ] ] ) # durations (default weights) of input columns) incoldurs = np . concatenate ( [ np . diff ( incolpos ) , [ 1 ] ] ) for c in range ( noutcols ) : firstincol = np . where ( incolpos <= outcolpos [ c ] ) [ 0 ] [ - 1 ] firstincolnext = np . where ( incolpos < outcolpos [ c + 1 ] ) [ 0 ] [ - 1 ] lastincol = max ( firstincol , firstincolnext ) # default weights wts = copy . deepcopy ( incoldurs [ firstincol : lastincol + 1 ] ) # now fix up by partial overlap at ends if len ( wts ) > 1 : wts [ 0 ] = wts [ 0 ] - ( outcolpos [ c ] - incolpos [ firstincol ] ) wts [ - 1 ] = wts [ - 1 ] - ( incolpos [ lastincol + 1 ] - outcolpos [ c + 1 ] ) wts = wts * 1. / float ( sum ( wts ) ) Y [ : , c ] = np . dot ( X [ : , firstincol : lastincol + 1 ] , wts ) # done return Y
Y = resample_mx(X, incolpos, outcolpos)
    X is taken as a set of columns, each starting at 'time'
    colpos, and continuing until the start of the next column.
    Y is a similar matrix, with time boundaries defined by
    outcolpos.  Each column of Y is a duration-weighted average of
    the overlapping columns of X.
    2010-04-14 Dan Ellis dpwe@ee.columbia.edu  based on samplemx/beatavg
    -> python: TBM, 2011-11-05, TESTED
Y = resample_mx ( X incolpos outcolpos ) X is taken as a set of columns each starting at time colpos and continuing until the start of the next column . Y is a similar matrix with time boundaries defined by outcolpos . Each column of Y is a duration - weighted average of the overlapping columns of X . 2010 - 04 - 14 Dan Ellis dpwe