3个版本
0.1.2 | 2024年5月13日 |
---|---|
0.1.1 | 2024年4月29日 |
0.1.0 | 2024年4月29日 |
#1204 在 算法
748 每月下载次数
用于 6 个crate(2直接使用)
71KB
1.5K SLoC
anndists
此crate提供了一些相关crate hnsw_rs、annembed 和 coreset 中使用的距离计算
所有距离都实现了 Distance 特性
pub trait Distance<T: Send + Sync> {
fn eval(&self, va: &[T], vb: &[T]) -> f32;
}
功能
该crate提供
-
标准数值类型向量的常用距离,如L1、L2、余弦、Jaccard、Hamming,以及u16上的Levenshtein距离。
-
概率分布之间的Hellinger距离和Jeffreys散度(f32和f64)。需要注意的是,Jeffreys散度(对称化的Kullback-Leibler散度)不满足三角不等式。(余弦距离也不满足!)
-
概率分布之间的Jensen-Shannon距离(f32和f64)。它定义为Jensen-Shannon散度的平方根,是一个有界度量。参见 Nielsen F. in Entropy 2019, 21(5), 485。
-
一个特性,允许用户实现自己的距离。它接受满足T:Serialize+Clone+Send+Sync的类型T的数据切片。也可以使用C extern函数或闭包。
-
提供对最常用情况的Simd实现。
实现
Simd支持通过 simdeez crate在Intel上使用,以及通过 std::simd 的一般情况的部分实现。
构建
Simd
-
simdeez crate提供的Simd可以通过特征 "simdeez_f" 访问,用于x86_64处理器。使用 cargo build --release --features "simdeez_f" 编译 ... 要在M1芯片上编译此crate,只需不激活此功能。
-
尽管如此,仍然可以与std::simd进行实验。使用特性stdsimd(cargo build --release --features "stdsimd")编译,在rust nightly上激活了portable_simd特性。这需要nightly编译器。目前只提供了u32x16和u64x8类型的Hamming距离以及f32*16上的DistL1、DistL2和DistDot。
基准测试和示例
贡献
Petter Egesund添加了DistLevenshtein距离。
许可证
许可协议为以下之一
- Apache License,版本2.0,LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0
- MIT许可证 LICENSE-MIT 或 http://opensource.org/licenses/MIT
由您选择。
依赖项
~4.5–6.5MB
~112K SLoC