mirror of
https://github.com/Magnus167/rustframe.git
synced 2025-08-20 04:00:01 +00:00
Add examples for descriptive stats
This commit is contained in:
parent
38213c73c7
commit
2a99d8930c
56
examples/descriptive_stats.rs
Normal file
56
examples/descriptive_stats.rs
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
use rustframe::compute::stats::{mean, mean_horizontal, mean_vertical, median, percentile, stddev};
|
||||||
|
use rustframe::matrix::Matrix;
|
||||||
|
|
||||||
|
/// Demonstrates descriptive statistics utilities.
|
||||||
|
///
|
||||||
|
/// Part 1: simple mean/stddev/median/percentile on a vector.
|
||||||
|
/// Part 2: mean across rows and columns.
|
||||||
|
fn main() {
|
||||||
|
simple_stats();
|
||||||
|
println!("\n-----\n");
|
||||||
|
axis_stats();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn simple_stats() {
|
||||||
|
println!("Basic stats\n-----------");
|
||||||
|
let data = Matrix::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0], 1, 5);
|
||||||
|
println!("mean : {:.2}", mean(&data));
|
||||||
|
println!("stddev : {:.2}", stddev(&data));
|
||||||
|
println!("median : {:.2}", median(&data));
|
||||||
|
println!("90th pct. : {:.2}", percentile(&data, 90.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn axis_stats() {
|
||||||
|
println!("Row/column means\n----------------");
|
||||||
|
// 2x3 matrix
|
||||||
|
let data = Matrix::from_rows_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0], 2, 3);
|
||||||
|
let v = mean_vertical(&data); // 1x3
|
||||||
|
let h = mean_horizontal(&data); // 2x1
|
||||||
|
println!("vertical means : {:?}", v.data());
|
||||||
|
println!("horizontal means: {:?}", h.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
const EPS: f64 = 1e-8;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_simple_stats() {
|
||||||
|
let data = Matrix::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0], 1, 5);
|
||||||
|
assert!((mean(&data) - 3.0).abs() < EPS);
|
||||||
|
assert!((stddev(&data) - 1.4142135623730951).abs() < EPS);
|
||||||
|
assert!((median(&data) - 3.0).abs() < EPS);
|
||||||
|
assert!((percentile(&data, 90.0) - 5.0).abs() < EPS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_axis_stats() {
|
||||||
|
let data = Matrix::from_rows_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0], 2, 3);
|
||||||
|
let v = mean_vertical(&data);
|
||||||
|
assert_eq!(v.data(), &[2.5, 3.5, 4.5]);
|
||||||
|
let h = mean_horizontal(&data);
|
||||||
|
assert_eq!(h.data(), &[2.0, 5.0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user