public Matrix transpose() { checkTranspose(); for (int j = 0; j < numColumns; ++j) for (int i = j + 1; i < numRows; ++i) { double value = get(i, j); set(i, j, get(j, i)); set(j, i, value); } return this; }
public Matrix add(Matrix B) { return add(1, B); }
public static RowMajorMatrix mtjToRowMajor(AbstractMatrix orig) { if( orig == null ) return null; RowMajorMatrix ret = new RowMajorMatrix(orig.numRows(),orig.numColumns()); for( int i = 0; i < ret.numRows; i++ ) { for( int j = 0; j < ret.numCols; j++ ) { ret.set(i,j,orig.get(i,j)); } } return ret; } }
public Matrix transBmultAdd(double alpha, Matrix B, Matrix C) { checkTransBmultAdd(B, C); if (alpha != 0) for (int i = 0; i < numRows; ++i) for (int j = 0; j < C.numColumns(); ++j) { double dot = 0; for (int k = 0; k < numColumns; ++k) dot += get(i, k) * B.get(j, k); C.add(i, j, alpha * dot); } return C; }
public Matrix transAmultAdd(double alpha, Matrix B, Matrix C) { checkTransAmultAdd(B, C); if (alpha != 0) for (int i = 0; i < numColumns; ++i) for (int j = 0; j < C.numColumns(); ++j) { double dot = 0; for (int k = 0; k < numRows; ++k) dot += get(k, i) * B.get(k, j); C.add(i, j, alpha * dot); } return C; }
public Matrix multAdd(double alpha, Matrix B, Matrix C) { checkMultAdd(B, C); if (alpha != 0) for (int i = 0; i < numRows; ++i) for (int j = 0; j < C.numColumns(); ++j) { double dot = 0; for (int k = 0; k < numColumns; ++k) dot += get(i, k) * B.get(k, j); C.add(i, j, alpha * dot); } return C; }
public Matrix transABmultAdd(double alpha, Matrix B, Matrix C) { checkTransABmultAdd(B, C); if (alpha != 0) for (int i = 0; i < numColumns; ++i) for (int j = 0; j < C.numColumns(); ++j) { double dot = 0; for (int k = 0; k < numRows; ++k) dot += get(k, i) * B.get(j, k); C.add(i, j, alpha * dot); } return C; }
public Matrix rank1(double alpha, Vector x, Vector y) { checkRank1(x, y); if (alpha == 0) return this; for (VectorEntry ei : x) if (ei.get() != 0) for (VectorEntry ej : y) if (ej.get() != 0) add(ei.index(), ej.index(), alpha * ei.get() * ej.get()); return this; }
public Matrix rank2(double alpha, Vector x, Vector y) { checkRank2(x, y); if (alpha == 0) return this; for (VectorEntry ei : x) for (VectorEntry ej : y) { add(ei.index(), ej.index(), alpha * ei.get() * ej.get()); add(ej.index(), ei.index(), alpha * ei.get() * ej.get()); } return this; }
public double get() { return AbstractMatrix.this.get(row, column); }
public Vector transMultAdd(double alpha, Vector x, Vector y) { checkTransMultAdd(x, y); if (alpha != 0) for (MatrixEntry e : this) y.add(e.column(), alpha * e.get() * x.get(e.row())); return y; }
public Matrix rank2(double alpha, Matrix B, Matrix C) { checkRank2(B, C); if (alpha == 0) return this; return B.transBmultAdd(alpha, C, C.transBmultAdd(alpha, B, this)); }
public Vector multAdd(double alpha, Vector x, Vector y) { checkMultAdd(x, y); if (alpha != 0) for (MatrixEntry e : this) y.add(e.row(), alpha * e.get() * x.get(e.column())); return y; }
public Matrix rank1(double alpha, Matrix C) { checkRank1(C); if (alpha == 0) return this; return C.transBmultAdd(alpha, C, this); }
public Matrix transBmultAdd(double alpha, Matrix B, Matrix C) { checkTransBmultAdd(B, C); if (alpha != 0) for (int i = 0; i < numRows; ++i) for (int j = 0; j < C.numColumns(); ++j) { double dot = 0; for (int k = 0; k < numColumns; ++k) dot += get(i, k) * B.get(j, k); C.add(i, j, alpha * dot); } return C; }
public Matrix transAmultAdd(double alpha, Matrix B, Matrix C) { checkTransAmultAdd(B, C); if (alpha != 0) for (int i = 0; i < numColumns; ++i) for (int j = 0; j < C.numColumns(); ++j) { double dot = 0; for (int k = 0; k < numRows; ++k) dot += get(k, i) * B.get(k, j); C.add(i, j, alpha * dot); } return C; }
public Matrix multAdd(double alpha, Matrix B, Matrix C) { checkMultAdd(B, C); if (alpha != 0) for (int i = 0; i < numRows; ++i) for (int j = 0; j < C.numColumns(); ++j) { double dot = 0; for (int k = 0; k < numColumns; ++k) dot += get(i, k) * B.get(k, j); C.add(i, j, alpha * dot); } return C; }