use crate::metrics::distance::Metric;
use crate::{ClusteringError, Result};
use ndarray::Array2;
pub type Tensor4D = Array2<f64>;
pub struct SpaceTimeKMeans {
n_clusters: usize,
temporal_weight: f64,
spatial_metric: Metric,
}
impl SpaceTimeKMeans {
pub fn new(n_clusters: usize) -> Self {
Self {
n_clusters,
temporal_weight: 0.5,
spatial_metric: Metric::Euclidean,
}
}
pub fn temporal_weight(mut self, weight: f64) -> Self {
self.temporal_weight = weight;
self
}
pub fn spatial_metric(mut self, metric: Metric) -> Self {
self.spatial_metric = metric;
self
}
pub fn fit(&self, data: &Tensor4D) -> Result<SpaceTimeClusteringResult> {
unimplemented!("SpaceTimeKMeans::fit")
}
}
pub struct SpaceTimeClusteringResult {
pub labels: Vec<usize>,
pub centroids_4d: Tensor4D,
}
pub struct SpaceTimeDBSCAN {
epsilon: f64,
min_samples: usize,
temporal_epsilon: f64,
}
impl SpaceTimeDBSCAN {
pub fn new(epsilon: f64, min_samples: usize) -> Self {
Self {
epsilon,
min_samples,
temporal_epsilon: epsilon,
}
}
pub fn temporal_epsilon(mut self, epsilon: f64) -> Self {
self.temporal_epsilon = epsilon;
self
}
pub fn fit(&self, data: &Tensor4D) -> Result<Vec<i32>> {
unimplemented!("SpaceTimeDBSCAN::fit")
}
}