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 和多种接口来实现这些目标。
三种使用方式
- Operations(过程式)——最低级别,几乎完全控制内存、速度和特定算法。使用过程式 API(对矩阵的函数调用)。
- SimpleMatrix——一个简化、易用的面向对象 API,灵感来自 Jama,具有流式接口。
- 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,后者启发了稀疏算法)。
相关
- 项目
- 项目
- 项目
- 项目