Search in sources :

Example 76 with IJV

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());
    }
}
Also used : IJV(org.apache.sysml.runtime.matrix.data.IJV)

Example 77 with IJV

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;
}
Also used : MatrixBlock(org.apache.sysml.runtime.matrix.data.MatrixBlock) IJV(org.apache.sysml.runtime.matrix.data.IJV) ArrayList(java.util.ArrayList)

Example 78 with IJV

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;
}
Also used : MatrixBlock(org.apache.sysml.runtime.matrix.data.MatrixBlock) IJV(org.apache.sysml.runtime.matrix.data.IJV) ArrayList(java.util.ArrayList)

Example 79 with IJV

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);
    }
}
Also used : MatrixBlock(org.apache.sysml.runtime.matrix.data.MatrixBlock) SparseBlockMCSR(org.apache.sysml.runtime.matrix.data.SparseBlockMCSR) IJV(org.apache.sysml.runtime.matrix.data.IJV) SparseBlockCSR(org.apache.sysml.runtime.matrix.data.SparseBlockCSR) SparseBlock(org.apache.sysml.runtime.matrix.data.SparseBlock) SparseBlockCOO(org.apache.sysml.runtime.matrix.data.SparseBlockCOO)

Example 80 with IJV

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);
    }
}
Also used : MatrixBlock(org.apache.sysml.runtime.matrix.data.MatrixBlock) SparseBlockMCSR(org.apache.sysml.runtime.matrix.data.SparseBlockMCSR) IJV(org.apache.sysml.runtime.matrix.data.IJV) SparseBlockCSR(org.apache.sysml.runtime.matrix.data.SparseBlockCSR) SparseBlock(org.apache.sysml.runtime.matrix.data.SparseBlock) SparseBlockCOO(org.apache.sysml.runtime.matrix.data.SparseBlockCOO)

Aggregations

IJV (org.apache.sysml.runtime.matrix.data.IJV)80 MatrixBlock (org.apache.sysml.runtime.matrix.data.MatrixBlock)22 DMLRuntimeException (org.apache.sysml.runtime.DMLRuntimeException)12 SparseBlock (org.apache.sysml.runtime.matrix.data.SparseBlock)11 BufferedWriter (java.io.BufferedWriter)10 OutputStreamWriter (java.io.OutputStreamWriter)10 FileSystem (org.apache.hadoop.fs.FileSystem)10 SequenceFile (org.apache.hadoop.io.SequenceFile)10 File (java.io.File)8 IOException (java.io.IOException)8 Path (org.apache.hadoop.fs.Path)8 JobConf (org.apache.hadoop.mapred.JobConf)8 MatrixCell (org.apache.sysml.runtime.matrix.data.MatrixCell)7 MatrixIndexes (org.apache.sysml.runtime.matrix.data.MatrixIndexes)7 ArrayList (java.util.ArrayList)6 Iterator (java.util.Iterator)6 KahanFunction (org.apache.sysml.runtime.functionobjects.KahanFunction)6 ValueFunction (org.apache.sysml.runtime.functionobjects.ValueFunction)6 KahanObject (org.apache.sysml.runtime.instructions.cp.KahanObject)6 MatrixCharacteristics (org.apache.sysml.runtime.matrix.MatrixCharacteristics)6