use of org.apache.sysml.runtime.matrix.data.IJV in project systemml by apache.
the class SpoofOuterProduct method executeCompressed.
private void executeCompressed(CompressedMatrixBlock a, DenseBlock u, DenseBlock v, SideInput[] b, double[] scalars, DenseBlock c, int m, int n, int k, OutProdType type, int rl, int ru, int cl, int cu) {
// NOTE: we don't create sparse side inputs w/ row-major cursors because
// compressed data is access in a column-major order
boolean left = (_outerProductType == OutProdType.LEFT_OUTER_PRODUCT);
Iterator<IJV> iter = !left ? a.getIterator(rl, ru, false) : // cl/cu -> colgroups
a.getIterator(rl, ru, cl, cu, false);
while (iter.hasNext()) {
IJV cell = iter.next();
double[] uvals = u.values(cell.getI());
double[] vvals = v.values(cell.getJ());
double[] cvals = c.values(left ? cell.getJ() : cell.getI());
int uix = u.pos(cell.getI());
int vix = v.pos(cell.getJ());
genexecDense(cell.getV(), uvals, uix, vvals, vix, b, scalars, cvals, left ? vix : uix, m, n, k, cell.getI(), cell.getJ());
}
}
use of org.apache.sysml.runtime.matrix.data.IJV in project systemml by apache.
the class MLContextConversionUtil method matrixObjectToListStringCSV.
/**
* Convert a {@code MatrixObject} to a {@code List<String>} in CSV format.
*
* @param matrixObject
* the {@code MatrixObject}
* @return the {@code MatrixObject} converted to a {@code List<String>}
*/
public static List<String> matrixObjectToListStringCSV(MatrixObject matrixObject) {
MatrixBlock mb = matrixObject.acquireRead();
int rows = mb.getNumRows();
int cols = mb.getNumColumns();
List<String> list = new ArrayList<>();
if (!mb.isEmptyBlock(false)) {
if (mb.isInSparseFormat()) {
Iterator<IJV> iter = mb.getSparseBlockIterator();
int prevCellRow = -1;
StringBuilder sb = null;
while (iter.hasNext()) {
IJV cell = iter.next();
int i = cell.getI();
double v = cell.getV();
if (i > prevCellRow) {
if (sb == null) {
sb = new StringBuilder();
} else {
list.add(sb.toString());
sb = new StringBuilder();
}
sb.append(v);
prevCellRow = i;
} else if (i == prevCellRow) {
sb.append(",");
sb.append(v);
}
}
if (sb != null) {
list.add(sb.toString());
}
} else {
for (int i = 0; i < rows; i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < cols; j++) {
if (j > 0) {
sb.append(",");
}
sb.append(mb.getValueDenseUnsafe(i, j));
}
list.add(sb.toString());
}
}
}
matrixObject.release();
return list;
}
use of org.apache.sysml.runtime.matrix.data.IJV in project systemml by apache.
the class MLContextConversionUtil method matrixObjectToListStringIJV.
/**
* Convert a {@code MatrixObject} to a {@code List<String>} in IJV format.
*
* @param matrixObject
* the {@code MatrixObject}
* @return the {@code MatrixObject} converted to a {@code List<String>}
*/
public static List<String> matrixObjectToListStringIJV(MatrixObject matrixObject) {
MatrixBlock mb = matrixObject.acquireRead();
int rows = mb.getNumRows();
int cols = mb.getNumColumns();
List<String> list = new ArrayList<>();
if (mb.getNonZeros() > 0) {
if (mb.isInSparseFormat()) {
Iterator<IJV> iter = mb.getSparseBlockIterator();
StringBuilder sb = null;
while (iter.hasNext()) {
IJV cell = iter.next();
sb = new StringBuilder();
sb.append(cell.getI() + 1);
sb.append(" ");
sb.append(cell.getJ() + 1);
sb.append(" ");
sb.append(cell.getV());
list.add(sb.toString());
}
} else {
StringBuilder sb = null;
for (int i = 0; i < rows; i++) {
sb = new StringBuilder();
for (int j = 0; j < cols; j++) {
sb = new StringBuilder();
sb.append(i + 1);
sb.append(" ");
sb.append(j + 1);
sb.append(" ");
sb.append(mb.getValueDenseUnsafe(i, j));
list.add(sb.toString());
}
}
}
}
matrixObject.release();
return list;
}
use of org.apache.sysml.runtime.matrix.data.IJV in project systemml by apache.
the class SparseBlockDelete method runSparseBlockDeleteTest.
/**
* @param btype
* @param sparsity
*/
private void runSparseBlockDeleteTest(SparseBlock.Type btype, double sparsity) {
try {
// data generation
double[][] A = getRandomMatrix(rows, cols, -10, 10, sparsity, 456);
// init sparse block
SparseBlock sblock = null;
MatrixBlock mbtmp = DataConverter.convertToMatrixBlock(A);
SparseBlock srtmp = mbtmp.getSparseBlock();
switch(btype) {
case MCSR:
sblock = new SparseBlockMCSR(srtmp);
break;
case CSR:
sblock = new SparseBlockCSR(srtmp);
break;
case COO:
sblock = new SparseBlockCOO(srtmp);
break;
}
// delete range per row via set
for (int i = 0; i < rows; i++) for (int j = cl; j < cu; j++) {
A[i][j] = 0;
sblock.set(i, j, 0);
}
// check for correct number of non-zeros
int[] rnnz = new int[rows];
int nnz = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) rnnz[i] += (A[i][j] != 0) ? 1 : 0;
nnz += rnnz[i];
}
if (nnz != sblock.size())
Assert.fail("Wrong number of non-zeros: " + sblock.size() + ", expected: " + nnz);
// check correct isEmpty return
for (int i = 0; i < rows; i++) if (sblock.isEmpty(i) != (rnnz[i] == 0))
Assert.fail("Wrong isEmpty(row) result for row nnz: " + rnnz[i]);
// check correct values
Iterator<IJV> iter = sblock.getIterator();
int count = 0;
while (iter.hasNext()) {
IJV cell = iter.next();
if (cell.getV() != A[cell.getI()][cell.getJ()])
Assert.fail("Wrong value returned by iterator: " + cell.getV() + ", expected: " + A[cell.getI()][cell.getJ()]);
count++;
}
if (count != nnz)
Assert.fail("Wrong number of values returned by iterator: " + count + ", expected: " + nnz);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
use of org.apache.sysml.runtime.matrix.data.IJV in project systemml by apache.
the class SparseBlockIndexRange method runSparseBlockIndexRangeTest.
/**
* @param btype
* @param sparsity
*/
private void runSparseBlockIndexRangeTest(SparseBlock.Type btype, double sparsity, UpdateType utype) {
try {
// data generation
double[][] A = getRandomMatrix(rows, cols, -10, 10, sparsity, 456);
// init sparse block
SparseBlock sblock = null;
MatrixBlock mbtmp = DataConverter.convertToMatrixBlock(A);
SparseBlock srtmp = mbtmp.getSparseBlock();
switch(btype) {
case MCSR:
sblock = new SparseBlockMCSR(srtmp);
break;
case CSR:
sblock = new SparseBlockCSR(srtmp);
break;
case COO:
sblock = new SparseBlockCOO(srtmp);
break;
}
// delete range per row via set
if (utype == UpdateType.DELETE) {
for (int i = 0; i < rows; i++) {
sblock.deleteIndexRange(i, cl, cu);
Arrays.fill(A[i], cl, cu, 0);
}
} else if (utype == UpdateType.INSERT) {
double[] vals = new double[cu - cl];
for (int j = cl; j < cu; j++) vals[j - cl] = j;
for (int i = 0; i < rows; i++) {
sblock.setIndexRange(i, cl, cu, vals, 0, cu - cl);
System.arraycopy(vals, 0, A[i], cl, cu - cl);
}
}
// check for correct number of non-zeros
int[] rnnz = new int[rows];
int nnz = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) rnnz[i] += (A[i][j] != 0) ? 1 : 0;
nnz += rnnz[i];
}
if (nnz != sblock.size())
Assert.fail("Wrong number of non-zeros: " + sblock.size() + ", expected: " + nnz);
// check correct isEmpty return
for (int i = 0; i < rows; i++) if (sblock.isEmpty(i) != (rnnz[i] == 0))
Assert.fail("Wrong isEmpty(row) result for row nnz: " + rnnz[i]);
// check correct values
Iterator<IJV> iter = sblock.getIterator();
int count = 0;
while (iter.hasNext()) {
IJV cell = iter.next();
if (cell.getV() != A[cell.getI()][cell.getJ()])
Assert.fail("Wrong value returned by iterator: " + cell.getV() + ", expected: " + A[cell.getI()][cell.getJ()]);
count++;
}
if (count != nnz)
Assert.fail("Wrong number of values returned by iterator: " + count + ", expected: " + nnz);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
Aggregations