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 数学
每月86次下载
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
此库有两个主要的特性:MatrixExt
和MatrixMutExt
。
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 License,版本 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在本作品中的任何贡献,都将如上所述双许可,不附加任何额外的条款或条件。
依赖项
~170KB