3 个版本
0.1.2 | 2020 年 10 月 22 日 |
---|---|
0.1.1 | 2020 年 10 月 21 日 |
0.1.0 | 2020 年 10 月 21 日 |
#24 in #data-points
1.5MB
1K SLoC
appr_dbscan_rust
本库实现了 Gan 和 Tao 在这篇论文中提出的近似 DBSCAN 算法的 Rust 实现
支持的数据文件格式
接受的数据文件应包含每行一个数据点,且不包含其他内容。每行应包含点的组成部分,由空格分隔。
每个点的组成部分将被读取并存储为 64 位浮点变量
示例
1.0 1.1 0.5
2.3 3.4 6.2
...
用法
本库中有四个主要函数,它们接受的输入类型不同
警告
以下每个函数都期望数据文件中的所有点具有相同的维度,否则会引发恐慌。
固定维度数据文件的近似 DBSCAN
如果每个点的维度是静态已知的(因此不是其他计算的结果),则可以使用此函数
pub fn do_appr_dbscan_file<P, const D: usize>(
filename: P,
epsilon: f64,
rho: f64,
min_pts: usize
) -> DBSCANResult<D>
where
P: AsRef<Path>,
示例
extern crate appr_dbscan;
use appr_dbscan::do_appr_dbscan_file;
use appr_dbscan::utils::DBSCANResult;
let res : DBSCANResult<2> = do_appr_dbscan_file("./datasets/out_test_1.txt", 0.3, 0.1, 10);
let clusters_count = res.len() - 1;
let noise_points_count = res[0].len();
未知维度数据文件的近似 DBSCAN
如果数据点的维度不是静态已知的(例如,如果有一个循环遍历多个不同维度的文件),则可以使用此函数
pub fn do_appr_dbscan_auto_dimensionality_file<P>(
filename: P,
epsilon: f64,
rho: f64,
min_pts: usize
) -> (VectorDBSCANResult, usize)
where
P: AsRef<Path>,
示例
extern crate appr_dbscan;
use appr_dbscan::do_appr_dbscan_auto_dimensionality_file;
let (res,dimensionality) = do_appr_dbscan_auto_dimensionality_file("./datasets/out_test_1.txt", 0.3, 0.1, 10);
println!("Points dimensionality: {}",dimensionality);
let clusters_count = res.len() - 1;
let noise_points_count = res[0].len();
固定维度点的向量近似 DBSCAN
如果您有一个点的类型为 Vec<[f64;D]>
的向量,则可以使用此函数
pub fn do_appr_dbscan_points<const D: usize>(
points: Vec<Point<D>>,
epsilon: f64,
rho: f64,
min_pts: usize
) -> DBSCANResult<D>
示例
extern crate appr_dbscan;
use appr_dbscan::do_appr_dbscan_points;
use appr_dbscan::utils::DBSCANResult;
let points = vec![[0.0,0.0],[1.0,1.0],[0.0,1.0],[1.0,0.0],[2.0,1.0],[0.0,2.0],[2.0,1.0],[1.0,1.0]];
let res : DBSCANResult<2> = do_appr_dbscan_points(points, 0.3, 0.1, 10);
let clusters_count = res.len() - 1;
let noise_points_count = res[0].len();
未知维度点的向量近似 DBSCAN
如果您有一个点的类型为 Vec<Vec<f64>>
的向量(例如,如果您在一个循环中聚类不同的向量),则可以使用此函数
pub fn do_appr_dbscan_auto_dimensionality_points(
points: Vec<VectorPoint>,
epsilon: f64,
rho: f64,
min_pts: usize
) -> (VectorDBSCANResult, usize)
示例
extern crate appr_dbscan;
use appr_dbscan::do_appr_dbscan_auto_dimensionality_points;
let points = vec![vec![0.0,0.0],vec![1.0,1.0],vec![0.0,1.0],vec![1.0,0.0],vec![2.0,1.0],vec![0.0,2.0],vec![2.0,1.0],vec![1.0,1.0]];
let (res, dimensionality) = do_appr_dbscan_auto_dimensionality_points(points, 0.3, 0.1, 10);
println!("Points dimensionality: {}",dimensionality);
let clusters_count = res.len() - 1;
let noise_points_count = res[0].len();