discrete-frechet
discrete-frechet copied to clipboard
Implementation of the discrete Fréchet distance
discrete-frechet
A dive into the discrete Fréchet distance calculation, from the naïve approach to high-speed and memory-efficient optimizations.
The discrete Fréchet distance measures the similarity between two polygonal curves or polylines.
This repository contains four different implementations of the discrete Fréchet distance calculation.
Medium Articles
How long should your dog leash be?
Fast Discrete Fréchet Distance
Using the Code
The DFD classes live in the distances
package. They are:
-
DiscreteFrechet
: The classic dynamic programming implementation using recursion and a NumPy array to store the distance data. -
LinarDiscreteFrechet
: The linearized implementation of the previous algorithm avoiding recursion. -
FastDiscreteFrechetSparse
: Implements the improved algorithm and uses a sparse array to store the distance data. The sparse array is implemented as a dictionary. -
FastDiscreteFrechetMatrix
: Same as above but uses a full-sized NumPy array to store the distance data. This is the fastest implementation of all.
To use the code, select the class to instantiate and initialize it with one of the following distance functions:
-
euclidean
: Standard euclidean distance -
haversine
: Haversine distance on a unit sphere -
earth_haversine
: Calculates the haversine distance on the Earth's surface in meters
All distance functions take the point parameters as NumPy arrays
and return the distance as a single float. The haversine distance
functions reverse the parameter indexing order. Instead of (x, y),
they take (lat, lon). The hearth_haversine
function takes its
inputs in decimal degrees.
Use the distance
function of your selected class to calculate
the DFD.