1个不稳定版本
0.1.0 | 2022年9月25日 |
---|
#2377 在 算法
13KB
202 行
基本概要
这是一个使用泛型参数实现的矩阵的简单实现。包括加法、减法和乘法。主模块是 matrix_operations
,矩阵的实际实现定义在 Matrix
下。
矩阵是泛型定义的,可以用任何满足以下条件的类型初始化:
impl<T> Matrix<T>
where T: Add<Output = T> + Mul<Output = T> +
Sub<Output = T> + Clone +
Default
尽管对 T
有很多限制,但实际上这是一组非常容易满足的标准。大多数数值类型都满足这个标准,包括我在 complex-plane
仓库中实现的复数。Matrix
实现直接实现了上述特性,因此您可以使用常见的运算符 +, -, *
来操作它们。
示例
初始化新矩阵
矩阵有许多初始化器。
// Define a matrix given a 2d vector of some type following the above bounds
let mat_from_data: Matrix<i32> = Matrix::from_data(some_predefined_2d_i32_vec);
// Create a 2x3 matrix where each entry is 1.25
let mat_from_constant: Matrix<f32> = Matrix::from_constant((2, 3), 1.25);
// Create a 16x8 matrix where each entry is i8::default()
let mat_from_dimension: Matrix<i8> = Matrix::default_from_dimension((16, 8));
// Create a 2x2 matrix where each entry is f32::default()
let mat_from_rows_and_columns: Matrix<f32> = Matrix::default_from_rows_and_columns((2,2));
所有这些都使用了预定义的常量或 T::default()
为您所使用的任何类型。还有对角矩阵的初始化器。
// Initialize a 10x10 diagonal unit matrix taking integral values
let unit_matrix_z_10x10: Matrix<i8> = Matrix::diagonal_from_constant((10,10), 1);
// Initialize a 5x5 diagonal matrix with diagonal values equal to f32::default()
let diagonal_default_mat: Matrix<f32> = Matrix::default_diagonal((5,5));
常见操作
// Take the transpose, M^T, of some matrix M
let m_t: Matrix<i32> = m.transpose();
// Add two matrices, m_1 and m_2
let sum = m_1 + m_2;
// Take the product of two matrices, m_1 and m_2
let product = m_1 * m_2
// Subtract m_1 from m_2
let difference = m_2 - m_1
项目路线图
我希望继续改进这个(到目前为止)非常简单的实现。我希望添加对以下内容的支持:
- 所有矩阵运算的多线程
- 包括计算行列式和矩阵求逆的能力
- 彻底重构实现以包含生命周期
- 添加矩阵转换支持