#matrix #traits #traits-structs #rows #element #square-matrix #matrix-ext

无std matrixable

扩展类似矩阵结构的特性和结构体

7个版本 (破坏性)

0.6.0 2024年4月15日
0.5.0 2024年3月26日
0.4.0 2024年3月19日
0.3.0 2024年3月14日
0.1.3 2024年3月5日

#181 in 数学

Download history 153/week @ 2024-04-15 7/week @ 2024-05-20 30/week @ 2024-07-01 86/week @ 2024-07-29

每月86次下载

MIT/Apache

125KB
2K SLoC

matrixable

此crate提供矩阵操作的工具。

示例

use matrixable::MatrixExt;

struct IdentityMatrix { dim_size: usize }

impl MatrixExt for IdentityMatrix {
    type Element = i32;

    #[inline]
    fn num_rows(&self) -> usize { self.dim_size }

    #[inline]
    fn num_cols(&self) -> usize { self.dim_size }

    #[inline]
    fn get(&self, i: usize, j: usize) -> Option<&Self::Element> {
        if i >= self.dim_size || j >= self.dim_size {
            None
        }
        else if i == j {
            Some(&1)
        }
        else {
            Some(&0)
        }
    }
}

fn main() {
    let identity = IdentityMatrix { dim_size: 3 };

    matrixable::print_rows_debug(&identity);
    println!();

    matrixable::print_columns_debug(&identity);
    println!();

    matrixable::print_diagonals_debug(&identity);
    println!();

    println!("Properties:");
    println!("* Dimensions: {:?}", identity.dimensions());
    println!("* Square matrix: {}", identity.is_square());
    println!("* Symmetric: {}", identity.is_symmetric());
    println!("* Skew-symmetric: {}", identity.is_skew_symmetric());
    println!("* Diagonal matrix: {}", identity.is_diagonal().0);
    println!("* Scalar matrix: {}", identity.is_scalar().0);
    println!("* Constant matrix: {}", identity.is_constant().0);
}

输出

Rows
0: [1, 0, 0]
1: [0, 1, 0]
2: [0, 0, 1]

Columns
0: [1, 0, 0]
1: [0, 1, 0]
2: [0, 0, 1]

Diagonals
0: [0]
1: [0, 0]
2: [1, 1, 1]
3: [0, 0]
4: [0]

Properties:
* Dimensions: (3, 3)
* Square matrix: true
* Symmetric: true
* Skew-symmetric: false
* Diagonal matrix: true
* Scalar matrix: true
* Constant matrix: false

此库有两个主要的特性:MatrixExtMatrixMutExt

MatrixExt

此特性需要实现三个方法

  • num_rows:应返回矩阵的行数。
  • num_cols:应返回列数。
  • get:如果找到,返回矩阵元素的引用。

一旦实现这些方法,将提供以下功能

  • 不可变性:此特性提供的所有函数不会修改类似矩阵的结构的元素,除非在此过程中消耗了该结构。
  • 迭代器:遍历所有元素,以及行、列和对角线。
  • 访问:以不同的方式访问元素,而不改变其位置:转置访问、旋转访问、重塑、子矩阵...
  • 转换:将结构体转换为另一种类型,可能是另一个矩阵。
  • 元数据:获取有关矩阵的信息:对称性、尺寸、对角性...

MatrixMutExt

此特性要求首先实现MatrixExt,然后实现所需的方法:get_mut

一旦实现MatrixMutExt,结构体会继承来自MatrixExt的功能,以及以下功能

  • 可变性:此特性提供的函数允许元素被修改。上述功能的可变版本也变得可用(迭代器、访问)。
  • 交换:交换元素、行或列。
  • 原地修改.

重要

  • 请注意,此包扩展了标准的2D数组 [[T; N]; M],现在可以通过 impls 默认功能使用。可以通过将 default-features 参数设置为 false 来禁用默认功能,如下所示
    matrixable = { version = "0.5.0", default-features = false }
    
  • 自版本 0.3.0 以来,此包支持 no_std 环境。
  • 自项目开始以来,已经进行了许多改进和更改(包括破坏性更改)。请参阅 CHANGELOG 获取更多详细信息。
  • 我们非常欢迎您对改进此包的帮助和建议。因此,请随时报告您可能遇到的任何问题!

更多信息

有关库的更多信息,请参阅 文档

许可证

许可协议为以下之一

供您选择。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在本作品中的任何贡献,都将如上所述双许可,不附加任何额外的条款或条件。

依赖项

~170KB