mirror of
https://github.com/Magnus167/rustframe.git
synced 2025-08-20 04:00:01 +00:00
Refactor README example to improve type annotations and clarity in matrix operations
This commit is contained in:
parent
eb90f0795b
commit
8f35a08d21
27
README.md
27
README.md
@ -53,33 +53,34 @@ let dates: Vec<NaiveDate> =
|
||||
.list()
|
||||
.unwrap();
|
||||
|
||||
let col_names = vec!["a".to_string(), "b".to_string()];
|
||||
let col_names: Vec<String> = vec!["a".to_string(), "b".to_string()];
|
||||
|
||||
let ma = Matrix::from_cols(vec![vec![1.0, 2.0, 3.0, 4.0], vec![5.0, 6.0, 7.0, 8.0]]);
|
||||
let mb = Matrix::from_cols(vec![vec![4.0, 3.0, 2.0, 1.0], vec![8.0, 7.0, 6.0, 5.0]]);
|
||||
let ma: Matrix<f64> = Matrix::from_cols(vec![vec![1.0, 2.0, 3.0, 4.0], vec![5.0, 6.0, 7.0, 8.0]]);
|
||||
let mb: Matrix<f64> = Matrix::from_cols(vec![vec![4.0, 3.0, 2.0, 1.0], vec![8.0, 7.0, 6.0, 5.0]]);
|
||||
|
||||
let fa = Frame::new(
|
||||
let fa: Frame<f64> = Frame::new(
|
||||
ma.clone(),
|
||||
col_names.clone(),
|
||||
Some(RowIndex::Date(dates.clone())),
|
||||
);
|
||||
let fb = Frame::new(mb, col_names, Some(RowIndex::Date(dates)));
|
||||
let fb: Frame<f64> = Frame::new(mb, col_names, Some(RowIndex::Date(dates)));
|
||||
|
||||
// Math that reads like math
|
||||
let result = &fa * &fb; // element‑wise multiply
|
||||
let total = result.sum_vertical().iter().sum::<f64>();
|
||||
let result: Frame<f64> = &fa * &fb; // element‑wise multiply
|
||||
let total: f64 = result.sum_vertical().iter().sum::<f64>();
|
||||
assert_eq!(total, 184.0);
|
||||
|
||||
let result = &ma + 1.0; // add scalar
|
||||
let result = &result - 1.0; // subtract scalar
|
||||
let result = &result * 2.0; // multiply by scalar
|
||||
let result = &result / 2.0; // divide by scalar
|
||||
// broadcast & reduce
|
||||
let result: Matrix<f64> = &ma + 1.0; // add scalar
|
||||
let result: Matrix<f64> = &result - 1.0; // subtract scalar
|
||||
let result: Matrix<f64> = &result * 2.0; // multiply by scalar
|
||||
let result: Matrix<f64> = &result / 2.0; // divide by scalar
|
||||
|
||||
let check = result.eq_elementwise(ma.clone()).all();
|
||||
let check: bool = result.eq_elementwise(ma.clone()).all();
|
||||
assert!(check);
|
||||
|
||||
// The above math can also be written as:
|
||||
let check = &(&(&(&(&ma + 1.0) - 1.0) * 2.0) / 2.0)
|
||||
let check: bool = (&(&(&(&ma + 1.0) - 1.0) * 2.0) / 2.0)
|
||||
.eq_elementwise(ma)
|
||||
.all();
|
||||
assert!(check);
|
||||
|
Loading…
x
Reference in New Issue
Block a user