nd4j-backends/nd4j-api-parent/nd4j-api/src/main/java/org/nd4j/linalg/eigen/Eigen.java
public static IComplexNDArray[] eigenvectors(INDArray A) {
        assert A.columns() == A.rows();
        // setting up result arrays
        INDArray WR = Nd4j.create(A.rows());
        INDArray WI = WR.dup();
        INDArray VR = Nd4j.create(A.rows(), A.rows());
        INDArray VL = Nd4j.create(A.rows(), A.rows());

        Nd4j.getBlasWrapper().geev('v', 'v', A.dup(), WR, WI, VL, VR);

        // transferring the result
        IComplexNDArray E = Nd4j.createComplex(WR, WI);
        IComplexNDArray V = Nd4j.createComplex((int) A.rows(), (int) A.rows());
        for (int i = 0; i < A.rows(); i++) {
            if (E.getComplex(i).isReal()) {
                IComplexNDArray column = Nd4j.createComplex(VR.getColumn(i));
                V.putColumn(i, column);
            } else {
                IComplexNDArray v = Nd4j.createComplex(VR.getColumn(i), VR.getColumn(i + 1));
                V.putColumn(i, v);
                V.putColumn(i + 1, v.conji());
                i += 1;
            }
        }
        return new IComplexNDArray[] {Nd4j.diag(E), V};
    }
public static IComplexNDArray[] eigenvectors(INDArray A) {
        assert A.columns() == A.rows();
        // setting up result arrays
        INDArray WR = Nd4j.create(A.rows());
        INDArray WI = WR.dup();
        INDArray VR = Nd4j.create(A.rows(), A.rows());
        INDArray VL = Nd4j.create(A.rows(), A.rows());

        Nd4j.getBlasWrapper().geev('v', 'v', A.dup(), WR, WI, VL, VR);

        // transferring the result
        IComplexNDArray E = Nd4j.createComplex(WR, WI);
        IComplexNDArray V = Nd4j.createComplex((int) A.rows(), (int) A.rows());
        for (int i = 0; i < A.rows(); i++) {
            if (E.getComplex(i).isReal()) {
                IComplexNDArray column = Nd4j.createComplex(VR.getColumn(i));
                V.putColumn(i, column);
            } else {
                IComplexNDArray v = Nd4j.createComplex(VR.getColumn(i), VR.getColumn(i + 1));
                V.putColumn(i, v);
                V.putColumn(i + 1, v.conji());
                i += 1;
            }
        }
        return new IComplexNDArray[] {Nd4j.diag(E), V};
    }
public static IComplexNDArray [ ] eigenvectors ( INDArray A ) { assert A . columns ( ) == A . rows ( ) ; // setting up result arrays INDArray WR = Nd4j . create ( A . rows ( ) ) ; INDArray WI = WR . dup ( ) ; INDArray VR = Nd4j . create ( A . rows ( ) , A . rows ( ) ) ; INDArray VL = Nd4j . create ( A . rows ( ) , A . rows ( ) ) ; Nd4j . getBlasWrapper ( ) . geev ( ' ' , ' ' , A . dup ( ) , WR , WI , VL , VR ) ; // transferring the result IComplexNDArray E = Nd4j . createComplex ( WR , WI ) ; IComplexNDArray V = Nd4j . createComplex ( ( int ) A . rows ( ) , ( int ) A . rows ( ) ) ; for ( int i = 0 ; i < A . rows ( ) ; i ++ ) { if ( E . getComplex ( i ) . isReal ( ) ) { IComplexNDArray column = Nd4j . createComplex ( VR . getColumn ( i ) ) ; V . putColumn ( i , column ) ; } else { IComplexNDArray v = Nd4j . createComplex ( VR . getColumn ( i ) , VR . getColumn ( i + 1 ) ) ; V . putColumn ( i , v ) ; V . putColumn ( i + 1 , v . conji ( ) ) ; i += 1 ; } } return new IComplexNDArray [ ] { Nd4j . diag ( E ) , V } ; }
Computes the eigenvalues and eigenvectors of a general matrix.
<p/>
For matlab users note the following from their documentation:
The columns of V present eigenvectors of A. The diagonal matrix D contains eigenvalues.
<p/>
This is in reverse order of the matlab eig(A) call.

@param A the ndarray to getFloat the eigen vectors for
@return 2 arrays representing W (eigen vectors) and V (normalized eigen vectors)
Computes the eigenvalues and eigenvectors of a general matrix . <p / > For matlab users note the following from their documentation : The columns of V present eigenvectors of A . The diagonal matrix D contains eigenvalues . <p / > This is in reverse order of the matlab eig ( A ) call .