Compare commits

..

1 Commits

2 changed files with 2 additions and 85 deletions

View File

@ -26,8 +26,7 @@ pub fn variance(x: &Matrix<f64>) -> f64 {
fn _variance_axis(x: &Matrix<f64>, axis: Axis) -> Matrix<f64> { fn _variance_axis(x: &Matrix<f64>, axis: Axis) -> Matrix<f64> {
match axis { match axis {
Axis::Row => { Axis::Row => { // Calculate variance for each column (vertical variance)
// Calculate variance for each column (vertical variance)
let num_rows = x.rows() as f64; let num_rows = x.rows() as f64;
let mean_of_cols = mean_vertical(x); // 1 x cols matrix let mean_of_cols = mean_vertical(x); // 1 x cols matrix
let mut result_data = vec![0.0; x.cols()]; let mut result_data = vec![0.0; x.cols()];
@ -43,8 +42,7 @@ fn _variance_axis(x: &Matrix<f64>, axis: Axis) -> Matrix<f64> {
} }
Matrix::from_vec(result_data, 1, x.cols()) Matrix::from_vec(result_data, 1, x.cols())
} }
Axis::Col => { Axis::Col => { // Calculate variance for each row (horizontal variance)
// Calculate variance for each row (horizontal variance)
let num_cols = x.cols() as f64; let num_cols = x.cols() as f64;
let mean_of_rows = mean_horizontal(x); // rows x 1 matrix let mean_of_rows = mean_horizontal(x); // rows x 1 matrix
let mut result_data = vec![0.0; x.rows()]; let mut result_data = vec![0.0; x.rows()];
@ -226,58 +224,4 @@ mod tests {
let x = Matrix::from_vec(data, 1, 3); let x = Matrix::from_vec(data, 1, 3);
percentile(&x, 101.0); percentile(&x, 101.0);
} }
#[test]
fn test_mean_vertical_horizontal() {
// 2x3 matrix:
let data = vec![1.0, 4.0, 2.0, 5.0, 3.0, 6.0];
let x = Matrix::from_vec(data, 2, 3);
// Vertical means (per column): [(1+4)/2, (2+5)/2, (3+6)/2]
let mv = mean_vertical(&x);
assert!((mv.get(0, 0) - 2.5).abs() < EPSILON);
assert!((mv.get(0, 1) - 3.5).abs() < EPSILON);
assert!((mv.get(0, 2) - 4.5).abs() < EPSILON);
// Horizontal means (per row): [(1+2+3)/3, (4+5+6)/3]
let mh = mean_horizontal(&x);
assert!((mh.get(0, 0) - 2.0).abs() < EPSILON);
assert!((mh.get(1, 0) - 5.0).abs() < EPSILON);
}
#[test]
fn test_variance_vertical_horizontal() {
let data = vec![1.0, 4.0, 2.0, 5.0, 3.0, 6.0];
let x = Matrix::from_vec(data, 2, 3);
// Vertical variances (per column): each is ((v - mean)^2 summed / 2)
// cols: {1,4}, {2,5}, {3,6} all give 2.25
let vv = variance_vertical(&x);
for c in 0..3 {
assert!((vv.get(0, c) - 2.25).abs() < EPSILON);
}
// Horizontal variances (per row): rows [1,2,3] and [4,5,6] both give 2/3
let vh = variance_horizontal(&x);
assert!((vh.get(0, 0) - (2.0 / 3.0)).abs() < EPSILON);
assert!((vh.get(1, 0) - (2.0 / 3.0)).abs() < EPSILON);
}
#[test]
fn test_stddev_vertical_horizontal() {
let data = vec![1.0, 4.0, 2.0, 5.0, 3.0, 6.0];
let x = Matrix::from_vec(data, 2, 3);
// Stddev is sqrt of variance
let sv = stddev_vertical(&x);
for c in 0..3 {
assert!((sv.get(0, c) - 1.5).abs() < EPSILON);
}
let sh = stddev_horizontal(&x);
// sqrt(2/3) ≈ 0.816497
let expected = (2.0 / 3.0 as f64).sqrt();
assert!((sh.get(0, 0) - expected).abs() < EPSILON);
assert!((sh.get(1, 0) - expected).abs() < EPSILON);
}
} }

View File

@ -63,19 +63,6 @@ impl<T: Clone> Matrix<T> {
Matrix { rows, cols, data } Matrix { rows, cols, data }
} }
/// Build from a flat Vec, assuming row-major order.
pub fn from_rows_vec(data: Vec<T>, rows: usize, cols: usize) -> Self {
let mut new_vec = Vec::with_capacity(rows * cols);
for c in 0..cols {
for r in 0..rows {
new_vec.push(data[r * cols + c].clone());
}
}
Matrix::from_vec(new_vec, rows, cols)
}
pub fn data(&self) -> &[T] { pub fn data(&self) -> &[T] {
&self.data &self.data
} }
@ -991,20 +978,6 @@ mod tests {
assert_eq!(m.to_vec(), vec![1.0, 3.0, 2.0, 4.0]); assert_eq!(m.to_vec(), vec![1.0, 3.0, 2.0, 4.0]);
} }
#[test]
fn test_from_rows_vec() {
// Representing:
// 1 2 3
// 4 5 6
let rows_data = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0];
let matrix = Matrix::from_rows_vec(rows_data, 2, 3);
let data = vec![1.0, 4.0, 2.0, 5.0, 3.0, 6.0]; // Column-major
let expected = Matrix::from_vec(data, 2, 3);
assert_eq!(matrix, expected);
}
// Helper function to create a basic Matrix for testing // Helper function to create a basic Matrix for testing
fn static_test_matrix() -> Matrix<i32> { fn static_test_matrix() -> Matrix<i32> {
// Column-major data: // Column-major data: