I was wondering whether any of the well-known matrix libraries for Java, such as Colt or EJML, actually provide similar functionality as MatLab? For instance, I can't seem to find anywhere in the definition of their API simple method to add or subtract two matrices/vectors by each other, which seems to be the most common operation used. Am I missing something?
6 Answers
Some Java libraries for linear algebra are:
- Apache Commons Math: http://commons.apache.org/proper/commons-math/
- jeigen - a wrapper for eigen - https://github.com/hughperkins/jeigen (includes complex and rarely found feature like matrix exponential and matrix logarithm)
- jblas http://mikiobraun.github.io/jblas/ (also features more complex functions like matrix exponential, also very fast).
- Colt http://acs.lbl.gov/software/colt/
- JAMA http://math.nist.gov/javanumerics/jama/
- UJMP - http://sourceforge.net/projects/ujmp/
EDIT maybe we can extend this list whenever one comes across and you know - the world keeps moving:
- ojAlgo - http://ojalgo.org/ has promising benchmarks
- Efficient Java Matrix Library (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/ lets you choose underlying native implementations like cuda or openBlas
Note: Personally: I use Apache Commons Math and Colt in my own project (http://www.finmath.net). While commons math is actively developed, I found that Colt is still faster in some tasks (like Eigenvalue decomposition). For that reason I use some kind of wrapper which allows me to quickly switch the underlying library (I only need a few things like solving systems of equations and Eigenvalue decomposition).

- 5,887
- 7
- 58
- 98

- 16,175
- 10
- 56
- 67
-
JEigen does not appear to implement solving sparse matrices [so I did it myself](https://stackoverflow.com/questions/17046585/cholmod-in-java/30526005#30526005). – Z boson May 29 '15 at 09:40
-
http://jscience.org/api/org/jscience/mathematics/vector/package-summary.html -- JScience also supports basic math operations on Matrices and Vectors – Michael von Wenckstern Sep 13 '16 at 21:21
-
https://github.com/BIDData/BIDMat might be a good addition as well.. (though I don't have experience with it) – AminM Jul 17 '20 at 22:50
Try Apache Commons Math library. org.apache.commons.math3.linear package contains the functions that you want. Home page

- 723
- 5
- 15
The interface for COLT gives you a generic OP: assign(matrix, function)
, which you can use to add or subtract matrices and vectors.
As the javadocs for assign()
says:
Assigns the result of a function to each cell;
x[row,col] =function(x[row,col],y[row,col])
.
So by using using an addition function as function
- you can add matrices.

- 175,853
- 27
- 231
- 333
There is also la4j library that supports functional programming features as functors. You can use transform() method with manual hi-order function.

- 2,492
- 3
- 21
- 30
You can use this one. It is very simple and supply basic matrix operations.
You can add/substract/multiply etc 2d matrixes and vectors.

- 20,936
- 12
- 75
- 93

- 5,170
- 1
- 20
- 25
You may try my newly Java library (compatible with Java 6+) that can be used for all sorts of applications notably for performing multi-threaded matrix calculations (extending JAMA with multi-threading; currently 30% faster than the available open source libraries). You can check it out on GitHub:
https://github.com/b-io/io.barras/tree/master/java/jupiter
Note that each project is independent from each other and is under the very permissive MIT License.

- 1
- 2