Search in sources :

Example 6 with LessThanEquals

use of org.apache.sysml.runtime.functionobjects.LessThanEquals in project systemml by apache.

the class LibMatrixOuterAgg method prepareRowIndicesMax.

/**
 * This function will return max indices, based on column vector data.
 * This indices will be computed based on operator.
 * These indices can be used to compute max index for a given input value in subsequent operation.
 *
 *  e.g. Right Vector has data (V1)    :                6   3   9   7   2   4   4   3
 *       Original indices for this data will be (I1):   1   2   3   4   5   6   7   8
 *
 *  Sorting this data based on value will be (V2):      2   3   3   4   4   6   7   9
 *      Then indices will be ordered as (I2):           5   2   8   6   7   1   4   3
 *
 * CumMax of I2 will be A:  (CumMin(I2))                5   5   8   8   8   8   8   8
 * CumMax of I2 in reverse order be B:                  8   8   8   7   7   4   4   3
 *
 * Values from vector A is used to compute RowIndexMax for > & >= operators
 * Values from vector B is used to compute RowIndexMax for < & <= operators
 * Values from I2 is used to compute RowIndexMax for == operator.
 * Original values are directly used to compute RowIndexMax for != operator
 *
 * Shifting values from vector A or B is required to compute final indices.
 * Once indices are shifted from vector A or B, their cell value corresponding to input data will be used.
 *
 * @param iCols ?
 * @param vmb ?
 * @param bOp binary operator
 * @return array of maximum row indices
 */
public static int[] prepareRowIndicesMax(int iCols, double[] vmb, BinaryOperator bOp) {
    int[] vixCumSum = null;
    int[] vix = new int[iCols];
    // sort index vector on extracted data (unstable)
    if (!(bOp.fn instanceof NotEquals)) {
        for (int i = 0; i < iCols; i++) vix[i] = i;
        SortUtils.sortByValueStable(0, iCols, vmb, vix);
    }
    if (bOp.fn instanceof LessThan || bOp.fn instanceof LessThanEquals || bOp.fn instanceof GreaterThan || bOp.fn instanceof GreaterThanEquals) {
        boolean bPrimeCumSum = false;
        if (bOp.fn instanceof LessThan || bOp.fn instanceof LessThanEquals)
            bPrimeCumSum = true;
        double[] dvix = new double[vix.length];
        if (bPrimeCumSum)
            for (int i = 0; i < vix.length; i++) dvix[vix.length - 1 - i] = vix[i];
        else
            for (int i = 0; i < vix.length; i++) dvix[i] = vix[i];
        MatrixBlock mbix = DataConverter.convertToMatrixBlock(dvix, true);
        UnaryOperator u_op = new UnaryOperator(Builtin.getBuiltinFnObject(Builtin.BuiltinCode.CUMMAX));
        MatrixBlock mbResult = (MatrixBlock) mbix.unaryOperations(u_op, new MatrixBlock());
        vixCumSum = DataConverter.convertToIntVector(mbResult);
        if (bPrimeCumSum)
            for (int i = 0; i < (vixCumSum.length + 1) / 2; i++) {
                int iTemp = vixCumSum[vixCumSum.length - 1 - i];
                vixCumSum[vixCumSum.length - 1 - i] = vixCumSum[i];
                vixCumSum[i] = iTemp;
            }
        adjustRowIndicesMax(vixCumSum, vmb, bOp);
    } else if (bOp.fn instanceof Equals || bOp.fn instanceof NotEquals) {
        adjustRowIndicesMax(vix, vmb, bOp);
        vixCumSum = vix;
    }
    return vixCumSum;
}
Also used : GreaterThanEquals(org.apache.sysml.runtime.functionobjects.GreaterThanEquals) LessThan(org.apache.sysml.runtime.functionobjects.LessThan) Equals(org.apache.sysml.runtime.functionobjects.Equals) GreaterThanEquals(org.apache.sysml.runtime.functionobjects.GreaterThanEquals) LessThanEquals(org.apache.sysml.runtime.functionobjects.LessThanEquals) NotEquals(org.apache.sysml.runtime.functionobjects.NotEquals) GreaterThan(org.apache.sysml.runtime.functionobjects.GreaterThan) AggregateUnaryOperator(org.apache.sysml.runtime.matrix.operators.AggregateUnaryOperator) UnaryOperator(org.apache.sysml.runtime.matrix.operators.UnaryOperator) NotEquals(org.apache.sysml.runtime.functionobjects.NotEquals) LessThanEquals(org.apache.sysml.runtime.functionobjects.LessThanEquals)

Aggregations

Equals (org.apache.sysml.runtime.functionobjects.Equals)6 GreaterThan (org.apache.sysml.runtime.functionobjects.GreaterThan)6 GreaterThanEquals (org.apache.sysml.runtime.functionobjects.GreaterThanEquals)6 LessThan (org.apache.sysml.runtime.functionobjects.LessThan)6 LessThanEquals (org.apache.sysml.runtime.functionobjects.LessThanEquals)6 NotEquals (org.apache.sysml.runtime.functionobjects.NotEquals)6 AggregateUnaryOperator (org.apache.sysml.runtime.matrix.operators.AggregateUnaryOperator)4 UnaryOperator (org.apache.sysml.runtime.matrix.operators.UnaryOperator)4 DMLRuntimeException (org.apache.sysml.runtime.DMLRuntimeException)2 LeftScalarOperator (org.apache.sysml.runtime.matrix.operators.LeftScalarOperator)2 RightScalarOperator (org.apache.sysml.runtime.matrix.operators.RightScalarOperator)2