15_norm_trace_outer/
15_norm_trace_outer.rs1use matten::Tensor;
12
13fn main() {
14 let v = Tensor::from_vec(vec![3.0, 4.0]);
16 println!("norm([3, 4]) = {}", v.norm());
17 assert_eq!(v.norm(), 5.0);
18
19 let m = Tensor::new(vec![1.0, 2.0, 2.0, 4.0], &[2, 2]);
20 println!("Frobenius norm (2x2) = {}", m.norm());
21
22 let sq = Tensor::new(vec![1.0, 2.0, 3.0, 4.0], &[2, 2]);
24 println!("trace(2x2) = {}", sq.trace());
25 assert_eq!(sq.trace(), 5.0);
26
27 let rect = Tensor::new(vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0], &[2, 3]);
28 println!("trace(2x3, min diag) = {}", rect.trace());
29 assert_eq!(rect.trace(), 6.0); let a = Tensor::from_vec(vec![1.0, 2.0, 3.0]);
33 let b = Tensor::from_vec(vec![4.0, 5.0]);
34 let o = a.outer(&b);
35 println!("outer([3] x [2]) = shape {:?}", o.shape());
36 assert_eq!(o.shape(), &[3, 2]);
37 assert_eq!(o.as_slice(), &[4.0, 5.0, 8.0, 10.0, 12.0, 15.0]);
38
39 assert!(Tensor::from_vec(vec![1.0, 2.0]).try_trace().is_err());
41
42 println!("Norm/trace/outer: OK");
43}