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?
Try Apache Commons Math library. org.apache.commons.math3.linear package contains the functions that you want. Home page
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).
Try Apache Commons Math library. org.apache.commons.math3.linear package contains the functions that you want. Home page
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.
There is also la4j library that supports functional programming features as functors. You can use transform() method with manual hi-order function.
You can use this one. It is very simple and supply basic matrix operations.
You can add/substract/multiply etc 2d matrixes and vectors.
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.
© 2022 - 2024 — McMap. All rights reserved.