pub fn minmax_scale_columns(x: &Tensor) -> Result<Tensor, MattenMlprepError>Expand description
Scales each column to the [0, 1] range:
out[i,j] = (x[i,j] - min_j) / (max_j - min_j).
ยงErrors
MattenMlprepError::ExpectedMatrixifxis not rank-2.MattenMlprepError::ZeroVarianceif any column is constant (zero range).MattenMlprepError::DynamicTensor(with thedynamicfeature) ifxis dynamic.
use matten::Tensor;
use matten_mlprep::minmax_scale_columns;
// Column 0: [0, 5, 10] -> [0, 0.5, 1].
let x = Tensor::new(vec![0.0, 5.0, 10.0], &[3, 1]);
let s = minmax_scale_columns(&x).unwrap();
assert_eq!(s.as_slice(), &[0.0, 0.5, 1.0]);Examples found in repository?
examples/minmax_scale.rs (line 19)
16fn main() {
17 // 3 samples, 2 features.
18 let x = Tensor::new(vec![0.0, 100.0, 5.0, 150.0, 10.0, 200.0], &[3, 2]);
19 let s = minmax_scale_columns(&x).expect("two non-constant columns");
20 println!("input shape {:?}: {:?}", x.shape(), x.as_slice());
21 println!("scaled shape {:?}: {:?}", s.shape(), s.as_slice());
22
23 // Per column: min -> 0.0, max -> 1.0 (column 0 = [0,5,10], column 1 = [100,150,200]).
24 assert_eq!(s.shape(), x.shape());
25 let ss = s.as_slice();
26 assert_eq!(ss[0], 0.0); // col 0 min
27 assert_eq!(ss[4], 1.0); // col 0 max
28 assert_eq!(ss[1], 0.0); // col 1 min
29 assert_eq!(ss[5], 1.0); // col 1 max
30 println!("minmax_scale: OK");
31}