public double getDouble(long row, long column) { long pos; if (transposed) { VerifyUtil.verifyEquals(row, 0, "row must be 0"); pos = column; } else { VerifyUtil.verifyEquals(column, 0, "column must be 0"); pos = row; } int index = MathUtil.search(indices, 0, valueCount, pos); if (index >= 0) { return values[index]; } else { return 0.0; } }
public static final void verifySameSize(double[] source1, double[] source2, double[] target) { verifyNotNull(source1, "matrix1 cannot be null"); verifyNotNull(source2, "matrix2 cannot be null"); verifyNotNull(target, "matrix3 cannot be null"); verifyEquals(source1.length, source2.length, "matrix1 and matrix2 have different sizes"); verifyEquals(source2.length, target.length, "matrix1 and matrix3 have different sizes"); }
public static final void verifySameSize(double[][] source1, double[][] source2, double[][] target) { verifyNotNull(source1, "matrix1 cannot be null"); verifyNotNull(source2, "matrix2 cannot be null"); verifyNotNull(target, "matrix3 cannot be null"); verifyNotNull(source1[0], "matrix1 must be 2d"); verifyNotNull(source2[0], "matrix2 must be 2d"); verifyNotNull(target[0], "matrix3 must be 2d"); verifyEquals(source1.length, source2.length, "matrix1 and matrix2 have different sizes"); verifyEquals(source2.length, target.length, "matrix1 and matrix3 have different sizes"); verifyEquals(source1[0].length, source2[0].length, "matrix1 and matrix2 have different sizes"); verifyEquals(source2[0].length, target[0].length, "matrix1 and matrix3 have different sizes"); }
public static final void verify2D(Matrix m) { verifyNotNull(m, "matrix cannot be null"); verifyEquals(m.getDimensionCount(), 2, "matrix is not 2d"); }
public static final void verifySameSize(double[][] source, double[][] target) { verifyNotNull(source, "matrix1 cannot be null"); verifyNotNull(target, "matrix2 cannot be null"); verifyNotNull(source[0], "matrix1 must be 2d"); verifyNotNull(target[0], "matrix2 must be 2d"); verifyEquals(source.length, target.length, "matrix1 and matrix2 have different sizes"); verifyEquals(source[0].length, target[0].length, "matrix1 and matrix2 have different sizes"); }
public static final void verifySameSize(double[] source, double[] target) { verifyNotNull(source, "matrix1 cannot be null"); verifyNotNull(target, "matrix2 cannot be null"); verifyEquals(source.length, target.length, "matrix1 and matrix2 have different sizes"); }
public void setDouble(double value, long row, long column) { long pos; if (transposed) { VerifyUtil.verifyEquals(row, 0, "row must be 0"); pos = column; } else { VerifyUtil.verifyEquals(column, 0, "column must be 0"); pos = row;
private final void calc(final int rows, final int cols, final double[] source, final double[] target) { VerifyUtil.verifyNotNull(source, "source cannot be null"); VerifyUtil.verifyNotNull(target, "target cannot be null"); VerifyUtil.verifyEquals(source.length, target.length, "matrices have different sizes"); if (source.length > 10000) { new PFor(0, rows - 1) { @Override public void step(int i) { for (int r = 0; r < cols; r++) { target[i * cols + r] = source[r * rows + i]; } } }; } else { for (int c = 0; c < rows; c++) { for (int r = 0; r < cols; r++) { target[c * cols + r] = source[r * rows + c]; } } } } };
public Reshape(Matrix source, long... newSize) { super(source); this.newSize = newSize; this.oldSize = source.getSize(); VerifyUtil.verifyEquals(Coordinates.product(oldSize), Coordinates.product(newSize), "new matrix must have the same number of cells"); }
private final void calc(final double[][] source, final double[][] target) { VerifyUtil.verifyNotNull(source, "source cannot be null"); VerifyUtil.verifyNotNull(target, "target cannot be null"); VerifyUtil.verifyNotNull(source[0], "source must be 2d"); VerifyUtil.verifyNotNull(target[0], "target must be 2d"); VerifyUtil.verifyEquals(source.length, target.length, "matrices have wrong size"); VerifyUtil.verifyEquals(source[0].length, target[0].length, "matrices have wrong size"); final int retcols = source.length; final int retrows = source[0].length; if (retcols * retrows > 10000) { new PFor(0, retrows - 1) { @Override public void step(int i) { for (int c = 0; c < retcols; c++) { target[i][c] = source[c][i]; } } }; } else { for (int r = 0; r < retrows; r++) { for (int c = 0; c < retcols; c++) { target[r][c] = source[c][r]; } } } }
public final void calc(final SparseMatrix source, final SparseMatrix target) { VerifyUtil.verify2D(source); VerifyUtil.verify2D(target); VerifyUtil.verifyEquals(source.getRowCount(), target.getColumnCount(), "matrices have wrong size"); VerifyUtil.verifyEquals(source.getColumnCount(), target.getRowCount(), "matrices have wrong size"); for (long[] c : source.availableCoordinates()) { Object o = source.getAsObject(c); target.setAsObject(o, Coordinates.transpose(c)); } } };
public final void calc(final DenseMatrix source, final DenseMatrix target) { if (source instanceof DenseMatrix2D && target instanceof DenseMatrix2D) { Transpose.DENSEMATRIX2D.calc((DenseMatrix2D) source, (DenseMatrix2D) target); } else { VerifyUtil.verify2D(source); VerifyUtil.verify2D(target); VerifyUtil.verifyEquals(source.getRowCount(), target.getColumnCount(), "matrices have wrong size"); VerifyUtil.verifyEquals(source.getColumnCount(), target.getRowCount(), "matrices have wrong size"); for (long[] c : source.allCoordinates()) { Object o = source.getAsObject(c); target.setAsObject(o, Coordinates.transpose(c)); } } } };
public final void calc(final DenseMatrix2D source, final DenseMatrix2D target) { if (source instanceof DenseDoubleMatrix2D && target instanceof DenseDoubleMatrix2D) { Transpose.DENSEDOUBLEMATRIX2D.calc((DenseDoubleMatrix2D) source, (DenseDoubleMatrix2D) target); } else { VerifyUtil.verify2D(source); VerifyUtil.verify2D(target); VerifyUtil.verifyEquals(source.getRowCount(), target.getColumnCount(), "matrices have wrong size"); VerifyUtil.verifyEquals(source.getColumnCount(), target.getRowCount(), "matrices have wrong size"); for (int r = (int) source.getRowCount(); --r != -1;) { for (int c = (int) source.getColumnCount(); --c != -1;) { Object o = source.getAsObject(r, c); target.setAsObject(o, c, r); } } } } };
public final void calc(final Matrix source1, final SparseMatrix source2, final Matrix target) { VerifyUtil.verify2D(source1); VerifyUtil.verify2D(source2); VerifyUtil.verify2D(target); VerifyUtil.verifyEquals(source1.getColumnCount(), source2.getRowCount(), "matrices have wrong sizes"); VerifyUtil.verifyEquals(target.getRowCount(), source1.getRowCount(), "matrices have wrong sizes"); VerifyUtil.verifyEquals(target.getColumnCount(), source2.getColumnCount(), "matrices have wrong sizes"); target.clear(); for (long[] c2 : source2.availableCoordinates()) { final double v2 = source2.getAsDouble(c2); if (v2 != 0.0d) { for (long row1 = source1.getRowCount(); --row1 != -1;) { final double v1 = source1.getAsDouble(row1, c2[0]); final double temp = v1 * v2; if (temp != 0.0d) { final double v3 = target.getAsDouble(row1, c2[1]); target.setAsDouble(v3 + temp, row1, c2[1]); } } } } } };
public final void calc(final SparseMatrix source1, final Matrix source2, final Matrix target) { VerifyUtil.verify2D(source1); VerifyUtil.verify2D(source2); VerifyUtil.verify2D(target); VerifyUtil.verifyEquals(source1.getColumnCount(), source2.getRowCount(), "matrices have wrong sizes"); VerifyUtil.verifyEquals(target.getRowCount(), source1.getRowCount(), "matrices have wrong sizes"); VerifyUtil.verifyEquals(target.getColumnCount(), source2.getColumnCount(), "matrices have wrong sizes"); target.clear(); for (long[] c1 : source1.availableCoordinates()) { final double v1 = source1.getAsDouble(c1); if (v1 != 0.0d) { for (long col2 = source2.getColumnCount(); --col2 != -1;) { final double v2 = source2.getAsDouble(c1[1], col2); final double temp = v1 * v2; if (temp != 0.0d) { final double v3 = target.getAsDouble(c1[0], col2); target.setAsDouble(v3 + temp, c1[0], col2); } } } } } };
public final void calc(final SparseMatrix source1, final SparseMatrix source2, final Matrix target) { VerifyUtil.verify2D(source1); VerifyUtil.verify2D(source2); VerifyUtil.verify2D(target); VerifyUtil.verifyEquals(source1.getColumnCount(), source2.getRowCount(), "matrices have wrong sizes"); VerifyUtil.verifyEquals(target.getRowCount(), source1.getRowCount(), "matrices have wrong sizes"); VerifyUtil.verifyEquals(target.getColumnCount(), source2.getColumnCount(), "matrices have wrong sizes"); target.clear(); for (long[] c1 : source1.availableCoordinates()) { final double v1 = source1.getAsDouble(c1); if (v1 != 0.0) { for (long[] c2 : source2.availableCoordinates()) { if (c2[0] == c1[1]) { final double v2 = source2.getAsDouble(c2); if (v1 != 0.0) { final double temp = v1 * v2; final double v3 = target.getAsDouble(c1[0], c2[1]); target.setAsDouble(v3 + temp, c1[0], c2[1]); } } } } } } };
final int m2RowCount = (int) B.getRowCount(); final int m2ColumnCount = (int) B.getColumnCount(); VerifyUtil.verifyEquals(m1ColumnCount, m2RowCount, "matrices have wrong sizes"); VerifyUtil.verifyEquals(m1RowCount, C.getRowCount(), "matrices have wrong sizes"); VerifyUtil.verifyEquals(m2ColumnCount, C.getColumnCount(), "matrices have wrong sizes");
final int m2RowCount = (int) B.getRowCount(); final int m2ColumnCount = (int) B.getColumnCount(); VerifyUtil.verifyEquals(m1ColumnCount, m2RowCount, "matrices have wrong size"); VerifyUtil.verifyEquals(m1RowCount, C.getRowCount(), "matrices have wrong size"); VerifyUtil.verifyEquals(m2ColumnCount, C.getColumnCount(), "matrices have wrong size");
public final void calc(final Matrix source, final Matrix target) { if (source == target) { throw new RuntimeException("cannot transpose into original matrix"); } if (source.isSparse() && source instanceof SparseMatrix && target.isSparse() && target instanceof SparseMatrix) { Transpose.SPARSEMATRIX.calc((SparseMatrix) source, (SparseMatrix) target); } else if (source instanceof DenseDoubleMatrix2D && target instanceof DenseDoubleMatrix2D) { Transpose.DENSEDOUBLEMATRIX2D.calc((DenseDoubleMatrix2D) source, (DenseDoubleMatrix2D) target); } else if (source instanceof DenseMatrix2D && target instanceof DenseMatrix2D) { Transpose.DENSEMATRIX2D.calc((DenseMatrix2D) source, (DenseMatrix2D) target); } else if (source instanceof DenseMatrix && target instanceof DenseMatrix) { Transpose.DENSEMATRIX.calc((DenseMatrix) source, (DenseMatrix) target); } else { VerifyUtil.verify2D(source); VerifyUtil.verify2D(target); VerifyUtil.verifyEquals(source.getRowCount(), target.getColumnCount(), "matrices have wrong size"); VerifyUtil.verifyEquals(source.getColumnCount(), target.getRowCount(), "matrices have wrong size"); for (long[] c : source.allCoordinates()) { Object o = source.getAsObject(c); target.setAsObject(o, Coordinates.transpose(c)); } } } };
public final void calc(final DenseDoubleMatrix2D source, final DenseDoubleMatrix2D target) { if (source instanceof HasColumnMajorDoubleArray1D && target instanceof HasColumnMajorDoubleArray1D) { calc((int) source.getRowCount(), (int) source.getColumnCount(), ((HasColumnMajorDoubleArray1D) source).getColumnMajorDoubleArray1D(), ((HasColumnMajorDoubleArray1D) target).getColumnMajorDoubleArray1D()); } else if (source instanceof HasRowMajorDoubleArray2D && target instanceof HasRowMajorDoubleArray2D) { calc(((HasRowMajorDoubleArray2D) source).getRowMajorDoubleArray2D(), ((HasRowMajorDoubleArray2D) target).getRowMajorDoubleArray2D()); } else { VerifyUtil.verify2D(source); VerifyUtil.verify2D(target); VerifyUtil.verifyEquals(source.getRowCount(), target.getColumnCount(), "matrices have wrong size"); VerifyUtil.verifyEquals(source.getColumnCount(), target.getRowCount(), "matrices have wrong size"); for (int r = (int) source.getRowCount(); --r != -1;) { for (int c = (int) source.getColumnCount(); --c != -1;) { target.setDouble(source.getDouble(r, c), c, r); } } } }