#矩阵 #线性代数 #f64 #mine #2d #initialization

matrijs

一个小的2D矩阵库。有许多这样的库,但这个是我的。

2个版本

0.1.1 2023年5月18日
0.1.0 2023年5月18日

#567 in 数学

MIT许可

21KB
475

矩阵 🔢

一个小的2D f64矩阵库。

有许多这样的库,但这个是我的。

注意:下面的示例可以在 examples/basic.rs 中找到。

// The matrix! macro allows for quick initialization.

// m = | 0.0  1.0 |
//     |-1.0  0.0 |
let mut m = matrix![0.0, 1.0; -1.0, 0.0];

// Scalar math.
m += 1.0;
m *= -10.0;

// You can also create a Matrix manually.
let m_expected = Matrix::new(2, 2, &[-10.0, -20.0, 0.0, -10.0]);
assert_eq!(m, m_expected);

// a = | 0.0  1.0 |
//     | 2.0  3.0 |
// b = | 4.0  5.0  6.0 |
//     | 7.0  8.0  9.0 |
let a = matrix![0.0, 1.0; 2.0, 3.0];
let b = matrix![4.0, 5.0, 6.0; 7.0, 8.0, 9.0];

// The dot product of `i` and `a` should be equal to `a` (idempotence).
let i = Matrix::identity(2);
assert_eq!(i.dot(&a), a);

assert_eq!(a.dot(&b), matrix![7.0, 8.0, 9.0; 29.0, 34.0, 39.0]);

// You can append rows and columns to expand what you're working with.
let mut ones = Matrix::one(2, 2);
ones.append_row(matrix![0.0, 0.0].array());

assert_eq!(
    ones,
    matrix![
        1.0, 1.0;
        1.0, 1.0;
        0.0, 0.0
    ]
);

// When in doubt, take a look at the shape of the matrix.
assert_eq!(ones.shape(), (3, 2)) // 3 rows, 2 columns

功能

  • 创建
    • 从数组:Matrix::new(3, 2, &[0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
    • 带值:Matrix::with_value(3, 16.1)
    • 零矩阵:Matrix::zero(3)
    • 单位矩阵:Matrix::one(3)
    • 身份矩阵:Matrix::identity(3)
    • 对角线: Matrix::diagonal(&[1.0, 3.0, 1.0, 2.0])
  • 操作
    • 转置
      • 原地: m.transpose();
      • 按值: m.t()
    • 标量操作
      • 加法、减法、乘法、除法: b = a + 1.0, b *= 2
    • 矩阵运算
      • 逐项加法、减法、乘法、除法: a + b
      • 点积: a.dot(&b)

实现

内部数据结构是一个按行排列的条目 Vec。这意味着这是一个 按行优先 的实现。

名称

在荷兰语中,有一个单词 matrijs(发音为 mat-rice),它与单词 matrix 有一个共同的祖先。《matrijs》指的是模具或印章,通常当它们按阵列排列时。

我喜欢这个库的名称,因为它包含了 'ij' 双字符,这与矩阵条目符号中看到的字母 ij 非常相似,例如 aij

无运行时依赖