Changeset 17460 for branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeVectorInterpreter.cs
- Timestamp:
- 02/28/20 14:55:58 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeVectorInterpreter.cs
r17455 r17460 118 118 if (instr.opCode == OpCodes.Variable) { 119 119 var variableTreeNode = (VariableTreeNode)instr.dynamicNode; 120 instr.data = dataset.GetReadOnlyDoubleValues(variableTreeNode.VariableName); 120 if (dataset.VariableHasType<double>(variableTreeNode.VariableName)) 121 instr.data = dataset.GetReadOnlyDoubleValues(variableTreeNode.VariableName); 122 else if (dataset.VariableHasType<DoubleVector>(variableTreeNode.VariableName)) 123 instr.data = dataset.GetReadOnlyDoubleVectorValues(variableTreeNode.VariableName); 124 else throw new NotSupportedException($"Type of variable {variableTreeNode.VariableName} is not supported."); 121 125 } else if (instr.opCode == OpCodes.FactorVariable) { 122 126 var factorTreeNode = instr.dynamicNode as FactorVariableTreeNode; … … 186 190 throw new NotSupportedException($"Unsupported argument type ({val})"); 187 191 } 192 private static EvaluationResult AggregateApply(EvaluationResult val, 193 Func<double, double> sFunc = null, 194 Func<DoubleVector, double> vFunc = null) { 195 if (val.IsScalar && sFunc != null) return new EvaluationResult(sFunc(val.Scalar)); 196 if (val.IsVector && vFunc != null) return new EvaluationResult(vFunc(val.Vector)); 197 throw new NotSupportedException($"Unsupported argument type ({val})"); 198 } 188 199 189 200 public virtual EvaluationResult Evaluate(IDataset dataset, ref int row, InterpreterState state) { … … 312 323 v => DoubleVector.Log(v)); 313 324 } 325 case OpCodes.Sum: { 326 var cur = Evaluate(dataset, ref row, state); 327 return AggregateApply(cur, 328 s => s, 329 v => v.Sum()); 330 } 331 case OpCodes.Average: { 332 var cur = Evaluate(dataset, ref row, state); 333 return AggregateApply(cur, 334 s => s, 335 v => v.Mean()); 336 } 314 337 case OpCodes.Variable: { 315 338 if (row < 0 || row >= dataset.Rows) return EvaluationResult.NaN;
Note: See TracChangeset
for help on using the changeset viewer.