20 stable releases
1.8.0 | Oct 12, 2024 |
---|---|
1.7.1 | Jul 12, 2024 |
1.6.3 | Mar 20, 2024 |
1.6.2 | Nov 12, 2023 |
0.1.1 | Apr 22, 2020 |
#65 in Hardware support
159 downloads per month
Used in 4 crates
(3 directly)
110KB
2K
SLoC
Distances (v1.8.0)
Fast and generic distance functions for high-dimensional data.
Usage
Add this to your project:
> cargo add distances@1.8.0
Use it in your project:
use distances::Number;
use distances::vectors::euclidean;
let a = [1.0_f32, 2.0, 3.0];
let b = [4.0_f32, 5.0, 6.0];
let distance: f32 = euclidean(&a, &b);
assert!((distance - (27.0_f32).sqrt()).abs() < 1e-6);
Features
- A
Number
trait to abstract over different numeric types.- Distance functions are generic over the return type implementing
Number
. - Distance functions may also be generic over the input type being a collection of
Number
s.
- Distance functions are generic over the return type implementing
- SIMD accelerated implementations for float types.
- Python bindings with
maturin
andpyo3
. -
no_std
support.
Available Distance Functions
- Vectors (high-dimensional data):
-
euclidean
-
squared_euclidean
-
manhattan
-
chebyshev
-
minkowski
- General Lp-norm.
-
minkowski_p
- General Lp-norm to the
p
th power.
- General Lp-norm to the
-
cosine
-
hamming
-
canberra
-
bray_curtis
-
pearson
1.0 - r
wherer
is the Pearson Correlation Coefficient
-
- Probability distributions:
-
wasserstein
-
bhattacharyya
-
hellinger
-
- String data, e.g. for genomic sequences:
-
levenshtein
-
needleman_wunsch
-
smith_waterman
-
hamming
- Normalized versions of the above.
-
- Sets:
-
jaccard
-
dice
-
kulsinski
-
hausdorff
-
- Graphs:
-
tanamoto
-
- Time series:
Contributing
Contributions are welcome, encouraged, and appreciated! See CONTRIBUTING.md.
License
Licensed under the MIT license.
Dependencies
~1–1.6MB
~34K SLoC