public final class ParallelRowMajorMatrix extends Matrix { private double[] elems ; public ParallelRowMajorMatrix(int rows, int cols) { super(rows, cols) ; elems = new double[rows * cols] ; } private int index(int i, int j) { return (i * cols) + j ; } public void set(int i, int j, double d) { elems[index(i, j)] = d ; } public double get(int i, int j) { return elems[index(i, j)] ; } public void multiplyLeft(double[] v, double[] out) { assert v.length == rows ; assert cols == out.length ; for (int i = 0 ; i < out.length ; ++i) out[i] = 0.0 ; for (int i = 0 ; i < rows ; ++i) { for (int j = 0 ; j < cols ; ++j) { out[j] += (v[i] * get(i, j)) ; } } } public void multiplyRight(double[] v, double[] out) { assert cols == v.length ; assert rows == out.length ; for (int i = 0 ; i < rows ; ++i) { double a = 0.0 ; for (int j = 0 ; j < cols ; ++j) { a = a + (get(i, j) * v[j]) ; } out[i] = a ; } } }