public DoubleMatrix2D forEachNonZero(final cern.colt.function.IntIntDoubleFunction function) { if (this.isNoView) { this.elements.forEachPair( new cern.colt.function.IntDoubleProcedure() { public boolean apply(int key, double value) { int i = key/columns; int j = key%columns; double r = function.apply(i,j,value); if (r!=value) elements.put(key,r); return true; } } ); } else { super.forEachNonZero(function); } return this; } /**
public DoubleMatrix2D forEachNonZero(final cern.colt.function.IntIntDoubleFunction function) { if (this.isNoView) { this.elements.forEachPair( new cern.colt.function.IntDoubleProcedure() { public boolean apply(int key, double value) { int i = key/columns; int j = key%columns; double r = function.apply(i,j,value); if (r!=value) elements.put(key,r); return true; } } ); } else { super.forEachNonZero(function); } return this; } /**
/** * * @param ASymm symm matrix filled in its subdiagonal elements * @param r the index of the row * @return */ public static double getRowInfinityNorm(final DoubleMatrix2D ASymm, final int r){ final double[] maxValueHolder = new double[]{-Double.MAX_VALUE}; IntIntDoubleFunction myFunct = new IntIntDoubleFunction() { @Override public double apply(int i, int j, double pij) { maxValueHolder[0] = Math.max(maxValueHolder[0], Math.abs(pij)); return pij; } }; //view A row from starting element to diagonal DoubleMatrix2D AR = ASymm.viewPart(r, 0, 1, r+1); AR.forEachNonZero(myFunct); //view A col from diagonal to final element DoubleMatrix2D AC = ASymm.viewPart(r, r, ASymm.rows()-r, 1); AC.forEachNonZero(myFunct); return maxValueHolder[0]; }
@Override public double apply(final int i, final int j, final double aij) { rowHolder[0] = i; colHolder[0] = j; valueHolder[0] = aij; //log.debug("a(" + i + "," + j + "): " + aij); DoubleMatrix2D AACol = AA.viewPart(0, j, AA.rows(), 1); //log.debug("ACol(" + j + "): " + ArrayUtils.toString(AACol.toArray())); // ACol.forEachNonZero(new IntIntDoubleFunction() { // public double apply(int r, int c, double AColrc) { // if (c < r + 1) { // logger.debug("sum " + AColrc + "*" + H.getQuick(j, j) + " to AHAT(" + r + "," + i + ")"); // ret.setQuick(r, i, ret.getQuick(r, i) + aij * AColrc * H.getQuick(j, j)); // } // return AColrc; // } // }); AACol.forEachNonZero(myFunc); return aij; } });
private static DoubleMatrix2D calculateHAT(final DoubleMatrix2D HH, final DoubleMatrix2D AA) { final DoubleMatrix2D ret = DoubleFactory2D.sparse.make(AA.columns(), AA.rows()); AA.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(int i, int j, double aij) { ret.setQuick(j, i, aij * HH.getQuick(j, j)); return aij; } }); return ret; }
final double[] y = new double[A.columns()]; A.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(int i, int j, double aij) {
source.forEachNonZero( new cern.colt.function.IntIntDoubleFunction() { public double apply(int i, int j, double value) {
source.forEachNonZero( new cern.colt.function.IntIntDoubleFunction() { public double apply(int i, int j, double value) {
maxValueHolder[0] = -Double.MAX_VALUE; DoubleMatrix2D P = AScaled.viewPart(i, 0, 1, c); P.forEachNonZero(myFunct); isOk = Math.abs(1. - maxValueHolder[0]) < eps; maxValueHolder[0] = -Double.MAX_VALUE; DoubleMatrix2D P = AScaled.viewPart(0, j, r, 1); P.forEachNonZero(myFunct); isOk = Math.abs(1. - maxValueHolder[0]) < eps;
AA.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(final int i, final int j, final double aij) {
final double alpha = ((cern.jet.math.PlusMult) function).multiplicator; if (alpha==0) return this; // nothing to do y.forEachNonZero( new cern.colt.function.IntIntDoubleFunction() { public double apply(int i, int j, double value) {
A.forEachNonZero(myFunct); }else{ for (int i = 0; i < r; i++) {
final double alpha = ((cern.jet.math.PlusMult) function).multiplicator; if (alpha==0) return this; // nothing to do y.forEachNonZero( new cern.colt.function.IntIntDoubleFunction() { public double apply(int i, int j, double value) {
A.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(int i, int j, double Aij) {
S.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(int i, int j, double hij) {
/** * Return diagonalU.A with diagonalU diagonal. * @param diagonal matrix U, in the form of a vector of its diagonal elements * @return U.A */ public static final DoubleMatrix2D diagonalMatrixMult(final DoubleMatrix1D diagonalU, DoubleMatrix2D A){ int r = diagonalU.size(); int c = A.columns(); final DoubleMatrix2D ret; if (A instanceof SparseDoubleMatrix2D) { ret = DoubleFactory2D.sparse.make(r, c); A.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(int i, int j, double aij) { ret.setQuick(i, j, aij * diagonalU.getQuick(i)); return aij; } }); } else { ret = DoubleFactory2D.dense.make(r, c); for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { ret.setQuick(i, j, A.getQuick(i, j) * diagonalU.getQuick(i)); } } } return ret; }
/** * Return A.diagonalU with diagonalU diagonal. * @param diagonal matrix U, in the form of a vector of its diagonal elements * @return U.A */ public static final DoubleMatrix2D diagonalMatrixMult(DoubleMatrix2D A, final DoubleMatrix1D diagonalU){ int r = diagonalU.size(); int c = A.columns(); final DoubleMatrix2D ret; if (A instanceof SparseDoubleMatrix2D) { ret = DoubleFactory2D.sparse.make(r, c); A.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(int i, int j, double aij) { ret.setQuick(i, j, aij * diagonalU.getQuick(j)); return aij; } }); } else { ret = DoubleFactory2D.dense.make(r, c); for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { ret.setQuick(i, j, A.getQuick(i, j) * diagonalU.getQuick(j)); } } } return ret; }
/** * Return diagonalU.A.diagonalV with diagonalU and diagonalV diagonal. * @param diagonalU diagonal matrix U, in the form of a vector of its diagonal elements * @param diagonalV diagonal matrix V, in the form of a vector of its diagonal elements * @return U.A.V */ public static final DoubleMatrix2D diagonalMatrixMult(final DoubleMatrix1D diagonalU, DoubleMatrix2D A, final DoubleMatrix1D diagonalV){ int r = A.rows(); int c = A.columns(); final DoubleMatrix2D ret; if (A instanceof SparseDoubleMatrix2D) { ret = DoubleFactory2D.sparse.make(r, c); A.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(int i, int j, double aij) { ret.setQuick(i, j, aij * diagonalU.getQuick(i) * diagonalV.getQuick(j)); return aij; } }); } else { ret = DoubleFactory2D.dense.make(r, c); for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { ret.setQuick(i, j, A.getQuick(i, j) * diagonalU.getQuick(i) * diagonalV.getQuick(j)); } } } return ret; }
A.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(int i, int j, double Aij) {
A.forEachNonZero(new IntIntDoubleFunction() { @Override public double apply(int i, int j, double Aij) {