我想知道是否有任何著名的 Java 矩阵库,例如 Colt 或 EJML,实际上提供了与 MatLab 类似的功能?例如,我似乎在他们的 API 简单方法的定义中找不到任何地方可以将两个矩阵/向量相加或相减,这似乎是最常用的操作。我错过了什么吗?
6 回答
一些用于线性代数的 Java 库是:
- 阿帕奇公共数学:http ://commons.apache.org/proper/commons-math/
- jeigen - eigen 的包装器 - https://github.com/hughperkins/jeigen(包括复杂且很少发现的功能,如矩阵指数和矩阵对数)
- jblas http://mikiobraun.github.io/jblas/(还具有矩阵指数等更复杂的功能,也非常快)。
- 柯尔特http://acs.lbl.gov/software/colt/
- JAMA http://math.nist.gov/javanumerics/jama/
- UJMP - http://sourceforge.net/projects/ujmp/
编辑也许我们可以在遇到任何人时扩展此列表,并且您知道-世界在不断发展:
- ojAlgo - http://ojalgo.org/有有希望的基准
- 高效的 Java 矩阵库 (EJML) - http://ejml.org
- ParallelColt - https://sites.google.com/site/piotrwendykier/software/parallelcolt
- la4j - http://la4j.org/
- MTJ - https://github.com/fommil/matrix-toolkits-java
- nd4j - https://nd4j.org/允许您选择底层的本机实现,如 cuda 或 openBlas
注意:就个人而言:我在自己的项目(http://www.finmath.net)中使用 Apache Commons Math 和 Colt。虽然公共数学得到了积极发展,但我发现 Colt 在某些任务(如特征值分解)中仍然更快。出于这个原因,我使用了某种包装器,它允许我快速切换底层库(我只需要一些东西,比如求解方程组和特征值分解)。
试试 Apache Commons 数学库。org.apache.commons.math3.linear 包包含你想要的函数。主页
COLT 的接口为您提供了一个通用的 OP: assign(matrix, function)
,您可以使用它来添加或减去矩阵和向量。
正如 javadocsassign()
所说:
将函数的结果分配给每个单元格;
x[row,col] =function(x[row,col],y[row,col])
.
因此,通过使用加法函数function
- 您可以添加矩阵。
还有一个la4j库支持函数式编程特性作为函子。您可以使用带有手动高阶功能的 transform() 方法。
你可以用这个。它非常简单并提供基本的矩阵运算。
您可以添加/减去/乘以等 2d 矩阵和向量。
您可以尝试我的新 Java 库(与 Java 6+ 兼容),它可用于各种应用程序,特别是用于执行多线程矩阵计算(使用多线程扩展 JAMA;目前比可用的开源库快 30%) . 你可以在 GitHub 上查看:
https://github.com/b-io/io.barras/tree/master/java/jupiter
请注意,每个项目都是相互独立的,并且都在非常宽松的 MIT 许可证下。