Skip to main content

07_transpose_swap_axes/
07_transpose_swap_axes.rs

1//! Transpose and axis swapping: owned, lifetime-free, row-major result.
2//!
3//! Run: cargo run --example 07_transpose_swap_axes
4
5use matten::Tensor;
6
7fn main() {
8    // 2-D transpose: swap rows and columns
9    let m = Tensor::new(vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0], &[2, 3]);
10    println!("original  {m:?}");
11    let mt = m.transpose();
12    println!("transposed {mt:?}");
13    assert_eq!(mt.shape(), &[3, 2]);
14
15    // t() is an alias
16    assert_eq!(m.t(), mt);
17
18    // Transpose twice is identity
19    assert_eq!(m.transpose().transpose(), m);
20    println!("transpose twice == identity: OK");
21
22    // swap_axes on rank-3
23    let r3 = Tensor::new((1..=24).map(|x| x as f64).collect(), &[2, 3, 4]);
24    let s = r3.swap_axes(0, 2);
25    println!("rank-3 swap_axes(0,2) shape: {:?}", s.shape()); // [4,3,2]
26}