Struct sampling::histogram::AtomicHistogramFloat
source · [−]pub struct AtomicHistogramFloat<T> { /* private fields */ }Expand description
Generic Histogram struct
Implementations
sourceimpl<T> AtomicHistogramFloat<T>
impl<T> AtomicHistogramFloat<T>
sourceimpl<T> AtomicHistogramFloat<T>where
T: Float + PartialOrd + FromPrimitive,
impl<T> AtomicHistogramFloat<T>where
T: Float + PartialOrd + FromPrimitive,
sourcepub fn new(left: T, right: T, bins: usize) -> Result<Self, HistErrors>
pub fn new(left: T, right: T, bins: usize) -> Result<Self, HistErrors>
Create a new Historgram
- right exclusive, left inclusive
- if you want
rightto behave (almost) the same as an inclusive border, consider usingnew(left, right + T::EPSILON, bins)(make sure, that adding Epsilon actually changes the value!)
sourcepub fn interval_length(&self) -> T
pub fn interval_length(&self) -> T
Returns the length of the interval
sourcepub fn bin_iter(&self) -> impl Iterator<Item = &[T; 2]>
pub fn bin_iter(&self) -> impl Iterator<Item = &[T; 2]>
Iterator over all the bins
In AtomicHistogramFloat a bin is defined by two values: The left border (inclusive) and the right border (exclusive)
Here you get an iterator which iterates over said borders. The Iterator returns a borrowed Array of length two, where the first value is the left (inclusive) border and the second value is the right (exclusive) border
Example
use sampling::histogram::*;
let hist = AtomicHistogramFloat::<f32>::new(0.0, 1.0, 2).unwrap();
let mut iter = hist.bin_iter();
assert_eq!(iter.next(), Some(&[0.0, 0.5]));
assert_eq!(iter.next(), Some(&[0.5, 1.0]));
assert_eq!(iter.next(), None);sourcepub fn bin_hits_iter(&self) -> impl Iterator<Item = (&[T; 2], usize)>
pub fn bin_hits_iter(&self) -> impl Iterator<Item = (&[T; 2], usize)>
Iterate over all bins
In AtomicHistogramFloat a bin is defined by two values: The left border (inclusive) and the right border (exclusive)
This Iterator iterates over these values as well as the corresponding hit count ( i.e., how often a bin was hit)
Item of Iterator
(&[left_border, right_border], number_of_hits)
Example
use sampling::histogram::*;
let mut hist = AtomicHistogramFloat::<f64>::new(0.0, 1.0, 2).unwrap();
hist.increment_quiet(0.5);
hist.increment_quiet(0.71253782387);
let mut iter = hist.bin_hits_iter();
assert_eq!(iter.next(), Some((&[0.0, 0.5], 0)));
assert_eq!(iter.next(), Some((&[0.5, 1.0], 2)));
assert_eq!(iter.next(), None);sourcepub fn increment<B: Borrow<T>>(&self, val: B) -> Result<usize, HistErrors>
pub fn increment<B: Borrow<T>>(&self, val: B) -> Result<usize, HistErrors>
Increment hit count of bin
This will increment the hit count of the bin corresponding to the value val.
If the bin was valid it will return the index of the corresponding bin
sourcepub fn increment_quiet<B: Borrow<T>>(&self, val: B)
pub fn increment_quiet<B: Borrow<T>>(&self, val: B)
Increment hit count
Increments the hit count of the bin corresponding to val.
If no bin corresponding to val exists, nothing happens
Trait Implementations
sourceimpl<T> AtomicHistogram for AtomicHistogramFloat<T>
impl<T> AtomicHistogram for AtomicHistogramFloat<T>
sourcefn count_multiple_index(
&self,
index: usize,
count: usize
) -> Result<(), HistErrors>
fn count_multiple_index(
&self,
index: usize,
count: usize
) -> Result<(), HistErrors>
Uses SeqCst
sourcefn hist(&self) -> &[AtomicUsize]
fn hist(&self) -> &[AtomicUsize]
sourcefn count_index(&self, index: usize) -> Result<(), HistErrors>
fn count_index(&self, index: usize) -> Result<(), HistErrors>
self.hist[index] += 1, Err() if index out of boundssourcefn any_bin_zero(&self) -> bool
fn any_bin_zero(&self) -> bool
sourceimpl<T> AtomicHistogramVal<T> for AtomicHistogramFloat<T>where
T: Float + Zero + NumCast,
impl<T> AtomicHistogramVal<T> for AtomicHistogramFloat<T>where
T: Float + Zero + NumCast,
sourcefn borders_clone(&self) -> Result<Vec<T>, HistErrors>
fn borders_clone(&self) -> Result<Vec<T>, HistErrors>
consider using self.borders()
sourcefn count_val<V: Borrow<T>>(&self, val: V) -> Result<usize, HistErrors>
fn count_val<V: Borrow<T>>(&self, val: V) -> Result<usize, HistErrors>
Ok(index), if inside of hist, Err(_) if val is invalidsourcefn distance<V: Borrow<T>>(&self, val: V) -> f64
fn distance<V: Borrow<T>>(&self, val: V) -> f64
sourcefn first_border(&self) -> T
fn first_border(&self) -> T
sourcefn second_last_border(&self) -> T
fn second_last_border(&self) -> T
let b = self.borders_clone().expect("overflow"); assert_eq!(self.second_last_border(), b[b.len()-2])sourcefn not_inside<V: Borrow<T>>(&self, val: V) -> bool
fn not_inside<V: Borrow<T>>(&self, val: V) -> bool
is_inside