use of org.apache.sysml.udf.Matrix in project incubator-systemml by apache.
the class DeNegInfinityWrapper method execute.
@Override
public void execute() {
try {
Matrix inM = (Matrix) getFunctionInput(0);
double[][] inData = inM.getMatrixAsDoubleArray();
for (int i = 0; i < inData.length; i++) {
for (int j = 0; j < inData[i].length; j++) {
if (Double.NEGATIVE_INFINITY == inData[i][j]) {
inData[i][j] = 0.0;
}
}
}
//create and copy output matrix
String dir = createOutputFilePathAndName(OUTPUT_FILE);
ret = new Matrix(dir, inM.getNumRows(), inM.getNumCols(), ValueType.Double);
ret.setMatrixDoubleArray(inData);
} catch (Exception e) {
throw new RuntimeException("Error executing external order function", e);
}
}
use of org.apache.sysml.udf.Matrix in project incubator-systemml by apache.
the class DeNaNWrapper method execute.
@Override
public void execute() {
try {
Matrix inM = (Matrix) getFunctionInput(0);
double[][] inData = inM.getMatrixAsDoubleArray();
for (int i = 0; i < inData.length; i++) {
for (int j = 0; j < inData[i].length; j++) {
if (Double.isNaN(inData[i][j])) {
inData[i][j] = 0.0;
}
}
}
//create and copy output matrix
String dir = createOutputFilePathAndName(OUTPUT_FILE);
ret = new Matrix(dir, inM.getNumRows(), inM.getNumCols(), ValueType.Double);
ret.setMatrixDoubleArray(inData);
} catch (Exception e) {
throw new RuntimeException("Error executing external removeNaN function", e);
}
}
use of org.apache.sysml.udf.Matrix in project incubator-systemml by apache.
the class PermutationMatrixWrapper method execute.
@Override
public void execute() {
try {
Matrix inM = (Matrix) getFunctionInput(0);
double[][] inData = inM.getMatrixAsDoubleArray();
boolean desc = Boolean.parseBoolean(((Scalar) getFunctionInput(1)).getValue());
// add index column as first column
double[][] idxData = new double[(int) inM.getNumRows()][2];
for (int i = 0; i < idxData.length; i++) {
idxData[i][0] = i;
idxData[i][1] = inData[i][0];
}
// sort input matrix (in-place)
if (// asc
!desc)
Arrays.sort(idxData, new AscRowComparator(1));
else
// desc
Arrays.sort(idxData, new DescRowComparator(1));
// create and populate sparse matrixblock for result
MatrixBlock mb = new MatrixBlock(idxData.length, idxData.length, true, idxData.length);
for (int i = 0; i < idxData.length; i++) {
mb.quickSetValue(i, (int) idxData[i][0], 1.0);
}
mb.examSparsity();
// set result
String dir = createOutputFilePathAndName(OUTPUT_FILE);
_ret = new Matrix(dir, mb.getNumRows(), mb.getNumColumns(), ValueType.Double);
_ret.setMatrixDoubleArray(mb, OutputInfo.BinaryBlockOutputInfo, InputInfo.BinaryBlockInputInfo);
} catch (Exception e) {
throw new RuntimeException("Error executing external permutation_matrix function", e);
}
}
use of org.apache.sysml.udf.Matrix in project incubator-systemml by apache.
the class ExternalFunctionProgramBlock method getInputObjects.
/**
* Method to convert string representation of input into function input
* object.
*
* @param inputs list of inputs
* @param variableMapping local variable map
* @return list of function parameters
*/
protected ArrayList<FunctionParameter> getInputObjects(ArrayList<String> inputs, LocalVariableMap variableMapping) {
ArrayList<FunctionParameter> inputObjects = new ArrayList<FunctionParameter>();
for (int i = 0; i < inputs.size(); i++) {
ArrayList<String> tokens = new ArrayList<String>();
StringTokenizer tk = new StringTokenizer(inputs.get(i), ":");
while (tk.hasMoreTokens()) {
tokens.add(tk.nextToken());
}
if (tokens.get(0).equals("Matrix")) {
String varName = tokens.get(1);
MatrixObject mobj = (MatrixObject) variableMapping.get(varName);
MatrixCharacteristics mc = mobj.getMatrixCharacteristics();
Matrix m = new Matrix(mobj.getFileName(), mc.getRows(), mc.getCols(), getMatrixValueType(tokens.get(2)));
modifyInputMatrix(m, mobj);
inputObjects.add(m);
}
if (tokens.get(0).equals("Scalar")) {
String varName = tokens.get(1);
ScalarObject so = (ScalarObject) variableMapping.get(varName);
Scalar s = new Scalar(getScalarValueType(tokens.get(2)), so.getStringValue());
inputObjects.add(s);
}
if (tokens.get(0).equals("Object")) {
String varName = tokens.get(1);
Object o = variableMapping.get(varName);
BinaryObject obj = new BinaryObject(o);
inputObjects.add(obj);
}
}
return inputObjects;
}
use of org.apache.sysml.udf.Matrix in project incubator-systemml by apache.
the class EvalFunction method execute.
@Override
public void execute(ExecutionContext ec) {
String fname = ((Scalar) getFunctionInput(0)).getValue();
MatrixObject in = ((Matrix) getFunctionInput(1)).getMatrixObject();
ArrayList<String> inputs = new ArrayList<>();
inputs.add("A");
ArrayList<String> outputs = new ArrayList<>();
outputs.add("B");
ExecutionContext ec2 = ExecutionContextFactory.createContext(ec.getProgram());
CPOperand inName = new CPOperand("TMP", org.apache.sysml.parser.Expression.ValueType.DOUBLE, DataType.MATRIX);
ec2.setVariable("TMP", in);
FunctionCallCPInstruction fcpi = new FunctionCallCPInstruction(null, fname, new CPOperand[] { inName }, inputs, outputs, "eval func");
fcpi.processInstruction(ec2);
MatrixObject out = (MatrixObject) ec2.getVariable("B");
_ret = new Matrix(out, ValueType.Double);
}
Aggregations