Efficient Java Matrix Library

Efficient Java Matrix Library (EJML) is a linear algebra library for manipulating real/complex/dense/sparse matrices. Its design goals are; 1) to be as computationally and memory efficient as possible for both small and large matrices, and 2) to be accessible to both novices and experts. These goals are accomplished by dynamically selecting the best algorithms to use at runtime, clean API, and multiple interfaces. EJML is free, written in 100% Java and has been released under an Apache v2.0 license.

Efficient Java Matrix Library
Original author(s)Peter Abeles
Stable release
0.39 / April 6, 2020 (2020-04-06)
Operating systemCross-platform
TypeLibrary
LicenseApache_License
Websiteejml.org

EJML has three distinct ways to interact with it: 1) procedural, 2) SimpleMatrix, and 3) Equations. Procedure provides all capabilities of EJML and almost complete control over memory creation, speed, and specific algorithms. SimpleMatrix provides a simplified subset of the core capabilities in an easy to use flow styled object-oriented API, inspired by Jama. Equations is a symbolic interface, similar in spirit to Matlab and other CAS, that provides a compact way of writing equations. [1]

Capabilities

EJML provides the following capabilities for dense matrices.

  • Basic Operators (addition, multiplication, ... )
  • Matrix Manipulation (extract, insert, combine, ... )
  • Linear Solvers (linear, least squares, incremental, ... )
  • Decompositions (LU, QR, Cholesky, SVD, Eigenvalue, ...)
  • Matrix Features (rank, symmetric, definitiveness, ... )
  • Random Matrices (covariance, orthogonal, symmetric, ... )
  • Different Internal Formats (row-major, block)
  • Unit Testing

Usage Example (Equations)

Computing the Kalman gain:

eq.process("K = P*H'*inv( H*P*H' + R )");

Usage Example (SimpleMatrix)

Example of Singular Value Decomposition (SVD):

SimpleSVD s = matA.svd();
SimpleMatrix U = s.getU();
SimpleMatrix W = s.getW();
SimpleMatrix V = s.getV();

Example of matrix multiplication:

SimpleMatrix result = matA.mult(matB);

Usage Example (DenseMatrix64F)

Example of Singular Value Decomposition (SVD):

SingularValueDecomposition_F64<DenseMatrix64F> svd = 
    DecompositionFactory_DDRM.svd(true, true, true);

if (!DecompositionFactory.decomposeSafe(svd, matA))
    throw new DetectedException("Decomposition failed.");

DenseMatrix64F U = svd.getU(null, false);
DenseMatrix64F S = svd.getW(null);
DenseMatrix64F V = svd.getV(null, false);

Example of matrix multiplication:

CommonOps_DDRM.mult(matA, matB, result);
gollark: Actually, hm, that would be excessive, probably not quite that many.
gollark: I think I have more than 89 already.
gollark: I mean, Nix can already do that, people just don't like it.
gollark: You need more than a very limited package manager frontend for this.
gollark: If you're installing it yourself, you *probably* should know what package manager is in use so you know how to update it and such.

See also

References

  1. "EJML Project Page". EJML. Peter Abeles. Retrieved Jan 21, 2019.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.