Skip to main content

20_dot_product/
20_dot_product.rs

1//! Vector dot product using `Tensor::dot`.
2//!
3//! Run: cargo run --example 20_dot_product
4//!
5//! `dot` returns a scalar-shaped tensor `[]` for two vectors of equal length.
6//! `*` is always element-wise — never a dot product.
7
8use matten::Tensor;
9
10fn main() {
11    let a = Tensor::from_vec(vec![1.0, 2.0, 3.0]);
12    let b = Tensor::from_vec(vec![4.0, 5.0, 6.0]);
13
14    let d = a.dot(&b); // 1*4 + 2*5 + 3*6 = 32
15    assert!(d.is_scalar());
16    println!("a · b = {}", d.as_slice()[0]); // 32.0
17
18    // Orthogonal vectors have zero dot product
19    let x = Tensor::from_vec(vec![1.0, 0.0]);
20    let y = Tensor::from_vec(vec![0.0, 1.0]);
21    assert_eq!(x.dot(&y).as_slice(), &[0.0]);
22    println!("orthogonal dot = 0: OK");
23}