linear-algebra
Luna-Flow/linear-algebra 是 Luna Flow 的线性代数层。它以两种执行模型——面向值的(immut)和原地的(mutable)——提供稠密矩阵和向量,为浮点矩阵提供数值例程,为整数矩阵提供精确算法,并提供小型能力层(algebra、container),让泛型算法可以运行在任何实现了它们的矩阵或向量类型上。本手册描述的是 0.5.0 版本。
包
| 包 | 用途 | 页面 |
|---|---|---|
immut | 不可变 Matrix、Vector,惰性 MatrixFn;精确行列式与幂 | API · 教程 · 设计 |
mutable | 原地 Matrix、Vector,视图;LU、Cholesky、特征值、统计 | API · 教程 · 设计 |
error | 供所有受检 API 使用的 LinearAlgebraError | API · 教程 · 设计 |
arithmetic | 标量运算 trait 与重新导出 | API · 教程 · 设计 |
algebra | 整体向量与矩阵的结构 trait(实验性) | API · 教程 · 设计 |
backends/default | 实现 algebra trait 的稠密包装类型 | API · 教程 · 设计 |
container | 与存储无关的操作字典与泛型转换(实验性) | API · 教程 · 设计 |
container/adapters | 本仓库每种类型的字典 | API · 教程 · 设计 |
internal | 共享的形状守卫(仅可在本模块内导入) | API · 教程 · 设计 |
consistency | 跨包一致性测试(无公开项) | API · 教程 · 设计 |
perf_support | 基准用例、fixture 与执行 | API · 教程 · 设计 |
perf | moon bench 入口包 | API · 教程 · 设计 |
perf_runner | 单用例基准可执行程序 | API · 教程 · 设计 |
src/doc_en_us 包没有单独的文档:它把本手册的每个页面作为 .mbt.md 文件链接进来,使示例作为测试编译并运行。架构指南展示了各包之间的依赖关系。集成章节说明外部库如何接入 algebra 层和 container 层。
阅读路径
应用开发者。 若要在 Double 矩阵上做数值计算,请从 mutable 教程开始;若需要值语义和精确的整数结果,请从 immut 教程开始。接着阅读错误教程,因为每个可能失败的操作都会返回 LinearAlgebraError。
库与算法作者。 阅读 algebra 教程和 backends/default 教程以编写泛型代码,然后阅读 container 教程了解如何在不同表示之间搬运数据;在为自己的类型发布实现之前,请阅读集成指南。
贡献者。 阅读架构指南、约定、所修改包的设计页面,以及 internal 和 consistency 教程。基准测试见 perf 相关页面。
安装
moon add Luna-Flow/linear-algebra@0.5.0
在 moon.pkg 中导入你使用的包:
///|
import {
"Luna-Flow/linear-algebra/immut",
"Luna-Flow/linear-algebra/mutable",
"Luna-Flow/linear-algebra/error" @la_error,
}
针对标量类型的泛型代码还需要上游包 Luna-Flow/luna-generic(0.3.3)和 Luna-Flow/arithmetic(0.2.2)。
工具链
本模块需要 moonc 0.10 或更新版本的 MoonBit,并且在 moon check --target all 下构建无警告。所有包都支持 wasm-gc、js、wasm 和 native 目标;mutable 为每个目标提供了一个调优的内核文件。基准测试包在 native 上运行。
0.5.0 中的状态
algebra、backends/default的 trait 层以及container是实验性的;它们的签名可能变化。- 原生 OpenBLAS 后端在本版本中已撤下,因为其上游绑定无法在 MoonBit 0.10 下编译。其源码保存在手册之外的
contrib/openblas_backend中;需要它的用户可以继续使用0.4.7。 - 版本历史见更新日志。