#matrix #graphics #vector

nightly quick_maths

简单的低维线性代数结构

10个版本

0.2.1 2020年8月19日
0.2.0 2020年8月19日
0.1.8 2020年6月29日

#1562 in 数学

27 每月下载次数

MIT许可证

72KB
2K SLoC

Quick Maths

  • 重要提示:此包是为nightly和const-generics设计的。

这是一个使用Rust不稳定const泛型特性的向量和矩阵算术的基本包。我只是需要一个方便做数学的工具,不想处理NDArray之类的...

此包旨在便于使用和提高效率。

示例使用

use quick_maths::{Vec3, Vector};

let a = Vec3::of(0.0);
let b = a + 1.0;
let c = b.sin();
let _dot = b.dot(&c);

// Taking elements out of the vector
let x = c.x();
let y = c.y();
let z = c.z();

// Or all at once
let Vector([i, j, k]) = c;
assert_eq!(x, i);
assert_eq!(y, j);
assert_eq!(z, k);

一些使使用更顺畅的事情

默认类型

除非您明确需要更改,类型默认设置为合理的默认值(f32)。如果您想更改默认类型,可以通过设置编译标志来更改。这允许在不必要时轻松使用库。因此,如果您需要在结构体中存储向量或矩阵,通常不需要指定类型

struct Circle {
  // implicitly f32 below
  center: Vec2,
  radius: f32,
}

如果需要将所有默认值从f32切换到f64,可以通过指定带有default_f64功能的依赖来实现。

一个用于向量和矩阵的API结构

其他API的一个痛点是,由于缺少const泛型,它们往往使用多个结构。尽管它们通常有统一这些结构的特性行为,但这会将代码变成特性行为的意大利面。因此,在使用和编写方面,只有一个结构体要容易得多。这个问题是依赖于不稳定的功能,但它导致代码更容易阅读。

看起来像Float

所有元素级函数都已实现。这意味着向量基本上与浮点数相同。这对于便于使用至关重要。NumPy努力创建一个在张量所有级别上统一API,在这方面与此相似。

缺少什么

仍然需要为不同维度的不同类型进行不同的乘法,但添加通用张量乘积可能很方便。

此外,还有卷积,但不知道这是否必要。

待办事项

  • 添加基准测试

依赖关系

~0.4–0.9MB
~17K SLoC