private void runSVD() { int gramDimension = gramMatrix.numRows(); try { svd = new no.uib.cipr.matrix.SVD(gramDimension, gramDimension).factor(gramMatrix); } catch (NotConvergedException e) { throw new RuntimeException(e); } double[] Vt_1D = svd.getVt().getData(); rightEigenvectors = LinearAlgebraUtils.reshape1DArray(Vt_1D, gramDimension, gramDimension); } }
private void runEVD() { int gramDimension = gramMatrix.numRows(); try { evd = no.uib.cipr.matrix.EVD.factorize(gramMatrix); } catch (NotConvergedException e) { throw new RuntimeException(e); } // initial eigenpairs eigenvalues = evd.getRealEigenvalues(); Matrix eigenvectorMatrix = evd.getRightEigenvectors(); eigenvectors = LinearAlgebraUtils.reshape1DArray(((DenseMatrix) eigenvectorMatrix).getData(), gramDimension, gramDimension); // sort eigenpairs in descending order according to the magnitude of eigenvalues EigenPair[] eigenPairs = LinearAlgebraUtils.createReverseSortedEigenpairs(eigenvalues, eigenvectors); eigenvalues = LinearAlgebraUtils.extractEigenvaluesFromEigenpairs(eigenPairs); eigenvectors = ArrayUtils.transpose(LinearAlgebraUtils.extractEigenvectorsFromEigenpairs(eigenPairs)); }
private void runEVD() { int gramDimension = symmGramMatrix.numRows(); try { symmDenseEVD = no.uib.cipr.matrix.SymmDenseEVD.factorize(this.symmGramMatrix); } catch (NotConvergedException e) { throw new RuntimeException(e); } // initial eigenpairs eigenvalues = symmDenseEVD.getEigenvalues(); double[] Vt_1D = symmDenseEVD.getEigenvectors().getData(); eigenvectors = LinearAlgebraUtils.reshape1DArray(Vt_1D, gramDimension, gramDimension); // sort eigenpairs in descending order according to the magnitude of eigenvalues EigenPair[] eigenPairs = LinearAlgebraUtils.createReverseSortedEigenpairs(eigenvalues, eigenvectors); eigenvalues = LinearAlgebraUtils.extractEigenvaluesFromEigenpairs(eigenPairs); eigenvectors = ArrayUtils.transpose(LinearAlgebraUtils.extractEigenvectorsFromEigenpairs(eigenPairs)); } }
/** * Gets the underlying double array from the MTJ matrix * @return double array from the underlying MTJ matrix */ protected double[] getArray() { return ((no.uib.cipr.matrix.DenseMatrix) this.getInternalMatrix()).getData(); }
/** * Gets the underlying double array from the MTJ matrix * @return double array from the underlying MTJ matrix */ protected double[] getArray() { return ((no.uib.cipr.matrix.DenseMatrix) this.getInternalMatrix()).getData(); }
/** * Get the data array backing this matrix (in column-major format) * * @param w * the matrix * @return the data */ public static double[] getData(Matrix w) { return ((no.uib.cipr.matrix.DenseMatrix) DenseMatrixFactoryMTJ.INSTANCE.copyMatrix(w).getInternalMatrix()) .getData(); }
private final static int sygvd(int itype, String jobz, String uplo, DenseMatrix A, DenseMatrix B, DenseVector W) { int info = dsygvd(itype, jobz, uplo, A.numColumns(), A.getData(), A.numRows(), B.getData(), B.numRows(), W.getData()); if (info == 0) { return 0; } else { if (info < 0) throw new IllegalArgumentException("LAPACK ERROR: DSYGVD returned " + info); throw new RuntimeException("LAPACK ERROR: DSYGVD returned " + info); } }
@Override public Matrix transRank2(double alpha, Matrix B, Matrix C) { if (!(B instanceof DenseMatrix) || !(C instanceof DenseMatrix)) return super.transRank2(alpha, B, C); checkTransRank2(B, C); double[] Bd = ((DenseMatrix) B).getData(), Cd = ((DenseMatrix) C) .getData(); BLAS.getInstance().dsyr2k(uplo.netlib(), Transpose.Transpose.netlib(), numRows, B.numRows(), alpha, Bd, Math.max(1, B.numRows()), Cd, Math.max(1, B.numRows()), 1, data, Math.max(1, numRows)); return this; }
@Override public Matrix transRank2(double alpha, Matrix B, Matrix C) { if (!(B instanceof DenseMatrix) || !(C instanceof DenseMatrix)) return super.transRank2(alpha, B, C); checkTransRank2(B, C); double[] Bd = ((DenseMatrix) B).getData(), Cd = ((DenseMatrix) C) .getData(); BLAS.getInstance().dsyr2k(uplo.netlib(), Transpose.Transpose.netlib(), numRows, B.numRows(), alpha, Bd, Math.max(1, B.numRows()), Cd, Math.max(1, B.numRows()), 1, data, Math.max(1, numRows)); return this; }
@Override public Matrix multAdd(double alpha, Matrix B, Matrix C) { if (!(B instanceof DenseMatrix) || !(C instanceof DenseMatrix)) return super.multAdd(alpha, B, C); checkMultAdd(B, C); double[] Bd = ((DenseMatrix) B).getData(), Cd = ((DenseMatrix) C) .getData(); BLAS.getInstance().dgemm(Transpose.NoTranspose.netlib(), Transpose.NoTranspose.netlib(), C.numRows(), C.numColumns(), numColumns, alpha, data, Math.max(1, numRows), Bd, Math.max(1, B.numRows()), 1, Cd, Math.max(1, C.numRows())); return C; }
@Override public Matrix transBmultAdd(double alpha, Matrix B, Matrix C) { if (!(B instanceof DenseMatrix) || !(C instanceof DenseMatrix)) return super.transBmultAdd(alpha, B, C); checkTransBmultAdd(B, C); double[] Bd = ((DenseMatrix) B).getData(), Cd = ((DenseMatrix) C) .getData(); BLAS.getInstance().dgemm(Transpose.NoTranspose.netlib(), Transpose.Transpose.netlib(), C.numRows(), C.numColumns(), numColumns, alpha, data, Math.max(1, numRows), Bd, Math.max(1, B.numRows()), 1, Cd, Math.max(1, C.numRows())); return C; }
@Override public Matrix transRank1(double alpha, Matrix C) { if (!(C instanceof DenseMatrix)) return super.transRank1(alpha, C); checkTransRank1(C); double[] Cd = ((DenseMatrix) C).getData(); BLAS.getInstance().dsyrk(uplo.netlib(), Transpose.Transpose.netlib(), numRows, numRows, alpha, Cd, Math.max(1, numRows), 1, data, Math.max(1, numRows)); return this; }
@Override public Matrix transRank1(double alpha, Matrix C) { if (!(C instanceof DenseMatrix)) return super.transRank1(alpha, C); checkTransRank1(C); double[] Cd = ((DenseMatrix) C).getData(); BLAS.getInstance().dsyrk(uplo.netlib(), Transpose.Transpose.netlib(), numRows, numRows, alpha, Cd, Math.max(1, numRows), 1, data, Math.max(1, numRows)); return this; }
private void runSVD() { int gramDimension = gramMatrix.numRows(); try { svd = new no.uib.cipr.matrix.SVD(gramDimension, gramDimension).factor(gramMatrix); } catch (NotConvergedException e) { throw new RuntimeException(e); } double[] Vt_1D = svd.getVt().getData(); rightEigenvectors = LinearAlgebraUtils.reshape1DArray(Vt_1D, gramDimension, gramDimension); } }
@Override public Matrix rank1(double alpha, Matrix C) { if (!(C instanceof DenseMatrix)) return super.rank1(alpha, C); checkRank1(C); double[] Cd = ((DenseMatrix) C).getData(); BLAS.getInstance().dsyrk(uplo.netlib(), Transpose.NoTranspose.netlib(), numRows, C.numColumns(), alpha, Cd, Math.max(1, numRows), 1, data, Math.max(1, numRows)); return this; }
@Override public Matrix rank1(double alpha, Matrix C) { if (!(C instanceof DenseMatrix)) return super.rank1(alpha, C); checkRank1(C); double[] Cd = ((DenseMatrix) C).getData(); BLAS.getInstance().dsyrk(uplo.netlib(), Transpose.NoTranspose.netlib(), numRows, C.numColumns(), alpha, Cd, Math.max(1, numRows), 1, data, Math.max(1, numRows)); return this; }
public Matrix mult(Matrix B, DenseMatrix C) { if (pivots == null) return super.mult(B, C); checkMultAdd(B, C); C.set(B); LAPACK.getInstance().dlaswp(C.numColumns(), C.getData(), Matrices.ld(C.numRows()), 1, pivots.length, pivots, transposed ? -1 : 1); return C; }
public Matrix transAmult(Matrix B, DenseMatrix C) { if (pivots == null) return super.transAmult(B, C); checkTransAmultAdd(B, C); C.set(B); LAPACK.getInstance().dlaswp(C.numColumns(), C.getData(), Matrices.ld(C.numRows()), 1, pivots.length, pivots, transposed ? 1 : -1); return C; }
public Matrix mult(Matrix B, DenseMatrix C) { if (pivots == null) return super.mult(B, C); checkMultAdd(B, C); C.set(B); LAPACK.getInstance().dlaswp(C.numColumns(), C.getData(), Matrices.ld(C.numRows()), 1, pivots.length, pivots, transposed ? -1 : 1); return C; }
public Matrix transAmult(Matrix B, DenseMatrix C) { if (pivots == null) return super.transAmult(B, C); checkTransAmultAdd(B, C); C.set(B); LAPACK.getInstance().dlaswp(C.numColumns(), C.getData(), Matrices.ld(C.numRows()), 1, pivots.length, pivots, transposed ? 1 : -1); return C; }