Skip to main content

02_shape_and_size/
02_shape_and_size.rs

1//! Shape inspection: `shape`, `ndim`, `len`, `is_scalar`, `is_vector`,
2//! `is_matrix`, and element access with `get`.
3//!
4//! Run: cargo run --example 02_shape_and_size
5
6use matten::Tensor;
7
8fn main() {
9    let scalar = Tensor::scalar(1.0);
10    let vec1d = Tensor::from_vec(vec![1.0, 2.0, 3.0]);
11    let mat = Tensor::new(vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0], &[2, 3]);
12    let rank3 = Tensor::zeros(&[2, 3, 4]);
13
14    for (name, t) in [
15        ("scalar", &scalar),
16        ("vector", &vec1d),
17        ("matrix", &mat),
18        ("rank-3", &rank3),
19    ] {
20        println!(
21            "{name:6}: shape={:?}  ndim={}  len={}  is_scalar={}  is_vector={}  is_matrix={}",
22            t.shape(),
23            t.ndim(),
24            t.len(),
25            t.is_scalar(),
26            t.is_vector(),
27            t.is_matrix()
28        );
29    }
30
31    // Safe element access: Option<f64>, never panics
32    println!("\nmat.get([0,1]) = {:?}", mat.get(&[0, 1])); // Some(2.0)
33    println!("mat.get([5,0]) = {:?}", mat.get(&[5, 0])); // None
34}