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 使用的 LinearAlgebraErrorAPI · 教程 · 设计
arithmetic标量运算 trait 与重新导出API · 教程 · 设计
algebra整体向量与矩阵的结构 trait(实验性)API · 教程 · 设计
backends/default实现 algebra trait 的稠密包装类型API · 教程 · 设计
container与存储无关的操作字典与泛型转换(实验性)API · 教程 · 设计
container/adapters本仓库每种类型的字典API · 教程 · 设计
internal共享的形状守卫(仅可在本模块内导入)API · 教程 · 设计
consistency跨包一致性测试(无公开项)API · 教程 · 设计
perf_support基准用例、fixture 与执行API · 教程 · 设计
perfmoon 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。
  • 版本历史见更新日志。