lessthanoptimal/ejml

A fast and easy to use linear algebra library written in Java for dense, sparse, real, and complex matrices.

EJML:高效的 Java 矩阵库

它是什么

一个用于 Java 的线性代数库——用于处理矩阵的数学工具——完全用 Java 编写,并在 Apache v2.0 许可下免费发布。它支持实数、复数、稠密和稀疏矩阵。

设计目标

  • 效率:对于小型和大型矩阵,尽可能在计算和内存方面高效。
  • 易用性:新手和专家都可以使用。
  • 它通过在运行时选择最佳算法、提供干净的 API 和多种接口来实现这些目标。

三种使用方式

  1. Operations(过程式)——最低级别,几乎完全控制内存、速度和特定算法。使用过程式 API(对矩阵的函数调用)。
  2. SimpleMatrix——一个简化、易用的面向对象 API,灵感来自 Jama,具有流式接口。
  3. Equations——类似于 Matlab 的符号接口;允许您编写紧凑的方程字符串。

这三种方式都可以完成相同的数学运算(README 中展示了每种风格的卡尔曼增益示例)。

功能亮点

  • 基本运算符——加法、乘法等
  • 矩阵操作——提取、插入、合并等
  • 线性求解器——线性、最小二乘、增量
  • 分解——LU、QR、Cholesky、SVD、特征值等
  • 矩阵特征——秩、对称性、正定性等
  • 随机矩阵生成——协方差、正交、对称
  • 不同的内部格式——行主序、块、稀疏
  • Graph BLAS(半环)
  • 单线程和并发实现
  • Kotlin 扩展
  • 每个算法的单元测试

质量与性能

  • 广泛进行单元测试以确保正确性
  • 内部基准测试以及针对 Java Matrix Benchmark 的基准测试
  • 文档位于 ejml.org(手册、JavaDoc)

包与模块

可在 Maven Central 上获取,坐标为 org.ejml:ejml-all:0.46.0(或单独引入各个模块):

模块 用途
ejml-core 核心数据结构和通用代码
ejml-fdense 稠密实数 32 位浮点算法
ejml-ddense 稠密实数 64 位浮点算法
ejml-cdense 稠密复数 32 位浮点算法
ejml-zdense 稠密复数 64 位浮点算法
ejml-fsparse 稀疏实数 32 位浮点算法
ejml-dsparse 稀疏实数 64 位浮点算法
ejml-simple SimpleMatrix 和 Equations 接口
ejml-java9module 用于 Java 模块系统(JPMS)的统一 jar

Java 模块系统说明: 不要同时将多个 ejml-* 模块放在模块路径上——否则会出现包拆分错误。请改用 ejml-java9module jar。

矩阵类型的命名约定

矩阵类名遵循类似 DMatrixRMaj 的模式:

  • 第一个字符 = 数据类型:D(实数双精度)、F(实数单精度)、Z(复数双精度)、C(复数单精度)、B(二进制)
  • 中间部分 = 结构:RMaj(稠密行主序)、RBlock(块)、NxN/N(固定大小)、CSC(压缩稀疏列)、Triplet

示例:DMatrixRMaj = 双精度、实数、稠密、行主序矩阵。

从源码构建

  • 使用 Gradle 构建;需要 Java 17+,但生成 Java 11 字节码。
  • 命令:./gradlew autogenerate 然后 ./gradlew publishToMavenLocal。
  • 其他命令:createLibraryDirectory(将所有模块 jar 保存到 ejml/libraries)和 oneJar(将所有内容编译到单个 EJML.jar 中)。
  • 预构建的 jar 可在 Maven Central 上获取——大多数用户无需构建。

仓库布局

  • docs/——文档(可能过时;在线文档最新)
  • examples/——使用示例
  • main/——库源代码
  • change.txt——版本历史

社区与支持

  • Google 群组:efficient-java-matrix-library-discuss
  • 问题跟踪器:GitHub issues(github.com/lessthanoptimal/ejml/issues)
  • 致谢:作者感谢 David Watkins(《矩阵计算基础》)和 Timothy A. Davis(《稀疏线性系统的直接方法》和 CSparse,后者启发了稀疏算法)。

相关

  • 项目
  • 项目
  • 项目
  • 项目