Skip to main content

06_broadcasting/
06_broadcasting.rs

1//! NumPy-style right-aligned broadcasting.
2//!
3//! Run: cargo run --example 06_broadcasting
4//!
5//! Rules: shapes are compatible when, aligning from the right, each dimension
6//! pair is equal, one is 1, or one side is missing (treated as 1).
7
8use matten::Tensor;
9
10fn main() {
11    // Scalar [] + matrix [2,2] -> [2,2]
12    let scalar = Tensor::scalar(10.0);
13    let mat = Tensor::new(vec![1.0, 2.0, 3.0, 4.0], &[2, 2]);
14    println!("scalar + mat = {:?}", &scalar + &mat);
15
16    // Row vector [3] + matrix [2,3] -> [2,3]  (bias addition)
17    let matrix = Tensor::new(vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0], &[2, 3]);
18    let bias = Tensor::new(vec![10.0, 20.0, 30.0], &[3]);
19    println!("matrix + bias = {:?}", &matrix + &bias);
20
21    // Column [3,1] + row [1,4] -> [3,4]  (outer product pattern)
22    let col = Tensor::new(vec![1.0, 2.0, 3.0], &[3, 1]);
23    let row = Tensor::new(vec![10.0, 20.0, 30.0, 40.0], &[1, 4]);
24    let result = &col + &row;
25    println!("col + row shape = {:?}", result.shape()); // [3, 4]
26    println!("col + row data  = {:?}", result.as_slice());
27}