Example #1
0
def s_erp(t0, t1, g):
    """
    Usage
    -----
    The Edit distance with Real Penalty between trajectory t0 and t1.

    Parameters
    ----------
    param t0 : len(t0)x2 numpy_array
    param t1 : len(t1)x2 numpy_array

    Returns
    -------
    dtw : float
          The Dynamic-Time Warping distance between trajectory t0 and t1
    """
    n0 = len(t0)
    n1 = len(t1)
    C = np.zeros((n0 + 1, n1 + 1))

    C[1:, 0] = sum(
        map(lambda x: abs(great_circle_distance(g[0], g[1], x[0], x[1])), t0))
    C[0, 1:] = sum(
        map(lambda y: abs(great_circle_distance(g[0], g[1], y[0], y[1])), t1))
    for i in np.arange(n0) + 1:
        for j in np.arange(n1) + 1:
            derp0 = C[i - 1, j] + great_circle_distance(
                t0[i - 1][0], t0[i - 1][1], g[0], g[1])
            derp1 = C[i, j - 1] + great_circle_distance(
                g[0], g[1], t1[j - 1][0], t1[j - 1][1])
            derp01 = C[i - 1, j - 1] + great_circle_distance(
                t0[i - 1][0], t0[i - 1][1], t1[j - 1][0], t1[j - 1][1])
            C[i, j] = min(derp0, derp1, derp01)
    erp = C[n0, n1]
    return erp
Example #2
0
def s_sspd(t0, t1):
    """
    Usage
    -----
    The sspd-distance between trajectories t1 and t2.
    The sspd-distance is the mean of the spd-distance between of t1 from t2 and the spd-distance of t2 from t1.

    Parameters
    ----------
    param t0 :  len(t0)x2 numpy_array
    param t1 :  len(t1)x2 numpy_array

    Returns
    -------
    sspd : float
            sspd-distance of trajectory t2 from trajectory t1
    """
    n0 = len(t0)
    n1 = len(t1)
    lats0 = t0[:, 1]
    lons0 = t0[:, 0]
    lats1 = t1[:, 1]
    lons1 = t1[:, 0]

    mdist = great_circle_distance_traj(lons0, lats0, lons1, lats1, n0, n1)

    t0_dist = map(lambda it0: great_circle_distance(lons0[it0], lats0[it0], lons0[it0 + 1], lats0[it0 + 1]),
                  range(n0 - 1))
    t1_dist = map(lambda it1: great_circle_distance(lons1[it1], lats1[it1], lons1[it1 + 1], lats1[it1 + 1]),
                  range(n1 - 1))

    dist = s_spd(lons0, lats0, lons1, lats1, n0, n1, mdist, t0_dist) + s_spd(lons1, lats1, lons0, lats0, n1, n0,
                                                                             mdist.T, t1_dist)
    return dist
Example #3
0
def s_dtw(t0, t1):
    """
    Usage
    -----
    The Dynamic-Time Warping distance between trajectory t0 and t1.

    Parameters
    ----------
    param t0 : len(t0)x2 numpy_array
    param t1 : len(t1)x2 numpy_array

    Returns
    -------
    dtw : float
          The Dynamic-Time Warping distance between trajectory t0 and t1
    """
    n0 = len(t0)
    n1 = len(t1)
    C = np.zeros((n0 + 1, n1 + 1))
    C[1:, 0] = float('inf')
    C[0, 1:] = float('inf')
    for i in np.arange(n0) + 1:
        for j in np.arange(n1) + 1:
            C[i, j] = great_circle_distance(t0[i - 1][0], t0[i - 1][1], t1[j - 1][0], t1[j - 1][1]) + \
                      min(C[i, j - 1], C[i - 1, j - 1], C[i - 1, j])
    dtw = C[n0, n1]
    return dtw
Example #4
0
def s_edr(t0, t1, eps):
    """
    Usage
    -----
    The Edit Distance on Real sequence between trajectory t0 and t1.

    Parameters
    ----------
    param t0 : len(t0)x2 numpy_array
    param t1 : len(t1)x2 numpy_array
    eps : float

    Returns
    -------
    edr : float
           The Longuest-Common-Subsequence distance between trajectory t0 and t1
    """
    n0 = len(t0)
    n1 = len(t1)
    # An (m+1) times (n+1) matrix
    C = [[0] * (n1 + 1) for _ in range(n0 + 1)]
    for i in range(1, n0 + 1):
        for j in range(1, n1 + 1):
            if great_circle_distance(t0[i - 1][0], t0[i - 1][1], t1[j - 1][0], t1[j - 1][1]) < eps:
                subcost = 0
            else:
                subcost = 1
            C[i][j] = min(C[i][j - 1] + 1, C[i - 1][j] + 1, C[i - 1][j - 1] + subcost)
    edr = float(C[n0][n1]) / max([n0, n1])
    return edr
Example #5
0
def s_lcss(t0, t1, eps):
    """
    Usage
    -----
    The Longuest-Common-Subsequence distance between trajectory t0 and t1.

    Parameters
    ----------
    param t0 : len(t0)x2 numpy_array
    param t1 : len(t1)x2 numpy_array
    eps : float

    Returns
    -------
    lcss : float
           The Longuest-Common-Subsequence distance between trajectory t0 and t1
    """
    n0 = len(t0)
    n1 = len(t1)
    # An (m+1) times (n+1) matrix
    C = [[0] * (n1 + 1) for _ in range(n0 + 1)]
    for i in range(1, n0 + 1):
        for j in range(1, n1 + 1):
            if great_circle_distance(t0[i - 1, 0], t0[i - 1, 1], t1[j - 1, 0],
                                     t1[j - 1, 1]) < eps:
                C[i][j] = C[i - 1][j - 1] + 1
            else:
                C[i][j] = max(C[i][j - 1], C[i - 1][j])
    lcss = 1 - float(C[n0][n1]) / min([n0, n1])
    return lcss
Example #6
0
def s_hausdorff(t0, t1):
    """
    Usage
    -----
    hausdorff distance between trajectories t1 and t2.

    Parameters
    ----------
    param lons0 :  n0 x 1 numpy_array, longitudes of trajectories t0
    param lats0 :  n0 x 1 numpy_array, lattitudes of trajectories t0
    param lons1 :  n1 x 1 numpy_array, longitudes of trajectories t1
    param lats1 :  n1 x 1 numpy_array, lattitudes of trajectories t1
    param n0: int, length of lons0 and lats0
    param n1: int, length of lons1 and lats1
    mdist : len(t0) x len(t1) numpy array, pairwise distance between points of trajectories t0 and t1
    param t0_dist:  l_t1 x 1 numpy_array,  distances between consecutive points in t0


    Returns
    -------
    h : float, hausdorff from trajectories t1 and t2
    """
    n0 = len(t0)
    n1 = len(t1)
    lats0 = t0[:, 1]
    lons0 = t0[:, 0]
    lats1 = t1[:, 1]
    lons1 = t1[:, 0]

    mdist = great_circle_distance_traj(lons0, lats0, lons1, lats1, n0, n1)

    t0_dist = map(
        lambda it0: great_circle_distance(lons0[it0], lats0[it0], lons0[
            it0 + 1], lats0[it0 + 1]), range(n0 - 1))
    t1_dist = map(
        lambda it1: great_circle_distance(lons1[it1], lats1[it1], lons1[
            it1 + 1], lats1[it1 + 1]), range(n1 - 1))

    h = max(
        s_directed_hausdorff(lons0, lats0, lons1, lats1, n0, n1, mdist,
                             t0_dist),
        s_directed_hausdorff(lons1, lats1, lons0, lats0, n1, n0, mdist.T,
                             t1_dist))
    return h