# Basic Linear Algebra

David Picard edited this page Nov 29, 2013 · 3 revisions
##### Clone this wiki locally

The package `fr.lip6.jkernelmachines.util.algebra` contains some classes to perform basic operations on vectors and matrices. To avoid defining new datatypes, all operations are performed on arrays of double:

``````double[] vector;
double[][] matrix;
``````

The matrix format follows the classical algebra notation (first index are the lines, and second are the columns), and not the column vector format encountered in hardware optimized libraries.

The package provides both in place and allocating operations. For example, a multiplication between 2 matrices can be performed by allocating the destination matrix:

``````double[][] in1, in2;
...
double[][] out = MatrixOperations.mul(in1, in2);
``````

Or in place as in

``````double[][] out, int1, in2;
...
MatrixOperations.mul(out, in1, in2);
``````

In that case `out` has to be allocated by the user before the call to `mul`

A eigen decomposition can be performed like this

``````double[][] X;
double[][][] ei = MatrixOperations.eig(X);
// reconstructing the original matrix
// from the eignvectors ei[0] and the eigenvalues ei[1]
double[][] Xrec = MatrixOperations.mul(ei[0], MatrixOperations.mul(ei[1], MatrixOperations.trans(ei[0])));
``````

While all operations provided by the package are available thanks to internal routines, they can be replace by the more efficient routines of EJML at no cost. In fact, all you have to do is to ensure 'ejml.jar' is in the JkernelMachines folder before compiling, and then in the classpath of your application. That is, you must launch the application using

``````java -cp jkernelmachines.jar:ejml.jar
``````

JKernelMachines automatically checks for the availability of EJML, and uses its routines for the eig decomposition.