2 releases
0.1.1 | Aug 31, 2024 |
---|---|
0.1.0 | Jul 29, 2024 |
#298 in Science
Used in oarfish
15KB
206 lines
kde-rs
An implementation of a simple, restricted 2D kernel density estimator in Rust.
The kde-rs
library is developed for a specific use-case, and while we may consider
generalizing it in the future, that is not a current focus.
Currently, the main restrictions are:
- only 2D estimation is supported
- only integer sample points --- (x, y) pairs are integers --- are supported (but they can be weighted)
- the symmetric Gaussian kernel is the only one currently implemented
However, subject to these constraints, kde-rs
strives to be easy to use, and performant.
lib.rs
:
The kde-rs
crate provides an implementation of a 2D kernel density
estimator for a restricted set of situations. It focuses on being
easy to use, and on being efficient in the scenario for which it
has been designed.
Example
use kders::{kde, kde::GridDimensions};
use rand::prelude::*;
use rand::{distributions::Uniform, Rng};
// create a grid on the range [0, 100]x[0, 100] with bins
// of width 5 and a kernel bandwidth of 2.
let mut rng = rand::thread_rng();
let die = Uniform::from(10.0..100.);
let mut g = kde::KDEGrid::new(GridDimensions{ width: 100, height: 100 }, 5, Some(2.0));
// add 100 random observations
for _i in 0..100 {
let x: f64 = die.sample(&mut rng);
let y: f64 = die.sample(&mut rng);
g.add_observation(x as usize, y as usize, rng.gen())
}
// obtain the density grid on which we'll evaluate our queries
let density = g.get_kde().unwrap();
// lookup the density at some points
let a = density[(10_usize, 10_usize)];
let b = density[(10_usize, 25_usize)];
let c = density[(68_usize, 5_usize)];
let d = density[(79_usize, 10_usize)];
Dependencies
~3.5MB
~67K SLoC