Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/17/18 10:03:01 (6 years ago)
Author:
pfleck
Message:

#2906

  • added Offset to log transformation
  • renamed parameter of linear transformation
  • added RescaleTransformation
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Transformations/LogarithmTransformation.cs

    r15865 r15938  
    3737      get { return (FixedValueParameter<DoubleValue>)Parameters["Base"]; }
    3838    }
     39    private FixedValueParameter<DoubleValue> OffsetParameter {
     40      get { return (FixedValueParameter<DoubleValue>)Parameters["Offset"]; }
     41    }
    3942    #endregion
    4043
     
    4447      set { BaseParameter.Value.Value = value; }
    4548    }
     49    public double Offset {
     50      get { return OffsetParameter.Value.Value; }
     51      set { OffsetParameter.Value.Value = value; }
     52    }
    4653    #endregion
    4754
     
    5057      : base() {
    5158      Parameters.Add(new FixedValueParameter<DoubleValue>("Base", "Base the logarithm", new DoubleValue(Math.E)));
     59      Parameters.Add(new FixedValueParameter<DoubleValue>("Offset", "Offset before the logarithm", new DoubleValue(0.0)));
    5260    }
    5361
     
    6674
    6775    public override bool Check(IEnumerable<double> data, out string errorMessage) {
    68       if (data.Any(x => x <= 0)) {
     76      if (data.Any(x => x + Offset <= 0)) {
    6977        errorMessage = "Log is not available for zero or negative values";
    7078        return false;
     
    7482
    7583    public override IEnumerable<double> Apply(IEnumerable<double> data) {
    76       return Apply(data, Base);
     84      return Apply(data, Base, Offset);
    7785    }
    7886
    7987    public override IEnumerable<double> InverseApply(IEnumerable<double> data) {
    80       return InverseApply(data, Base);
     88      return InverseApply(data, Base, Offset);
    8189    }
    8290
    8391
    84     public static IEnumerable<double> Apply(IEnumerable<double> data, double @base = Math.E) {
    85       return data.Select(x => Math.Log(x, @base));
     92    public static IEnumerable<double> Apply(IEnumerable<double> data, double @base = Math.E, double offset = 0.0) {
     93      return data.Select(x => Math.Log(x + offset, @base));
    8694    }
    8795
    88     public static IEnumerable<double> InverseApply(IEnumerable<double> data, double @base = Math.E) {
    89       return ExponentialTransformation.Apply(data, @base);
     96    public static IEnumerable<double> InverseApply(IEnumerable<double> data, double @base = Math.E, double offset = 0.0) {
     97      return ExponentialTransformation.InverseApply(data, @base).Select(x => x - offset);
    9098    }
    9199  }
Note: See TracChangeset for help on using the changeset viewer.