zmatrix 0.3.0

This is a matrix calculation lib
Documentation
use zmatrix::dense;
use zmatrix::dense::Matrix;

fn main() {
    let m = Matrix::<3, 4, i32>::new([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]);
    println!("{}", m);
    show_add();
    show_sub();
    show_mul();
    show_get();
    show_set();
    show_scale();
    show_matrix_product();
    show_transform();
}

fn show_add() {
    let m1 = Matrix::<3, 3, i32>::new([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
    let m2 = Matrix::<3, 3, i32>::new([[4, 5, 6], [7, 8, 9], [10, 11, 12]]);
    let m3 = m1 + m2;
    println!("add result:\n{}", m3);
}

fn show_sub() {
    let m1 = Matrix::<3, 3, i32>::new([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
    let m2 = Matrix::<3, 3, i32>::new([[4, 5, 6], [7, 8, 9], [10, 11, 12]]);
    let m3 = m2 - m1;
    println!("sub result:\n{}", m3);
}

fn show_mul() {
    let m1 = Matrix::<3, 3, i32>::new([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
    let m2 = Matrix::<3, 3, i32>::new([[4, 5, 6], [7, 8, 9], [10, 11, 12]]);
    let m3 = m2 * m1;
    println!("multi result:\n{}", m3);
}

fn show_get() {
    let m1 = Matrix::<3, 3, i32>::new([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
    let value = m1.get(1, 1);
    if let Some(x) = value {
        println!("get value:{}", x);
    }
}

fn show_matrix_product() {
    let m1 = Matrix::<2, 3, i32>::new([[1, 2, 3], [4, 5, 6]]);
    let m2 = Matrix::<3, 4, i32>::new([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]);
    let result = m1.product(&m2).unwrap();
    println!("matrix product:\n{}", result);
}

fn show_transform() {
    let m1 = Matrix::<2, 3, i32>::new([[1, 2, 3], [4, 5, 6]]);
    let m2 = m1.T();
    println!("\ntransform:\n{}", m2);
}

fn show_set() {
    let mut m1 = Matrix::<2, 3, i32>::new([[1, 2, 3], [4, 5, 6]]);
    m1.set(1, 1, 12);
    let v = m1.get(1, 1);
    if let Some(x) = v {
        println!("set value:{}", x);
    }
}

fn show_scale() {
    let m1 = Matrix::<3, 3, i32>::new([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
    let m2 = m1.scale(3);
    println!("\nscale result:\n{}", m2);
}