Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/28/20 14:55:58 (4 years ago)
Author:
pfleck
Message:

#3040

  • Added full functional grammar for vectors.
  • Added sum and mean aggregation for vectors.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeVectorInterpreter.cs

    r17455 r17460  
    118118        if (instr.opCode == OpCodes.Variable) {
    119119          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.");
    121125        } else if (instr.opCode == OpCodes.FactorVariable) {
    122126          var factorTreeNode = instr.dynamicNode as FactorVariableTreeNode;
     
    186190      throw new NotSupportedException($"Unsupported argument type ({val})");
    187191    }
     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    }
    188199
    189200    public virtual EvaluationResult Evaluate(IDataset dataset, ref int row, InterpreterState state) {
     
    312323              v => DoubleVector.Log(v));
    313324          }
     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          }
    314337        case OpCodes.Variable: {
    315338            if (row < 0 || row >= dataset.Rows) return EvaluationResult.NaN;
Note: See TracChangeset for help on using the changeset viewer.