Changeset 8477 for branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSum.cs
- Timestamp:
- 08/13/12 16:18:37 (12 years ago)
- Location:
- branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Algorithms.DataAnalysis merged: 8419,8421,8439,8448,8452,8455,8463-8465,8467,8471,8473,8475
- Property svn:mergeinfo changed
-
branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSum.cs
r8416 r8477 20 20 #endregion 21 21 22 using System; 23 using System.Collections.Generic; 22 24 using System.Linq; 23 25 using HeuristicLab.Common; … … 48 50 this.terms = cloner.Clone(original.terms); 49 51 this.numberOfVariables = original.numberOfVariables; 52 AttachEventHandlers(); 50 53 } 51 54 … … 53 56 : base() { 54 57 this.terms = new ItemList<ICovarianceFunction>(); 58 AttachEventHandlers(); 59 } 60 61 private void AttachEventHandlers() { 62 this.terms.CollectionReset += (sender, args) => ClearCache(); 63 this.terms.ItemsAdded += (sender, args) => ClearCache(); 64 this.terms.ItemsRemoved += (sender, args) => ClearCache(); 65 this.terms.ItemsReplaced += (sender, args) => ClearCache(); 66 this.terms.ItemsMoved += (sender, args) => ClearCache(); 55 67 } 56 68 … … 86 98 } 87 99 88 public double[] GetGradient(int i, int j) { 89 return terms.Select(t => t.GetGradient(i, j)).SelectMany(seq => seq).ToArray(); 100 private Dictionary<int, Tuple<int, int>> cachedParameterMap; 101 public double GetGradient(int i, int j, int k) { 102 if (cachedParameterMap == null) { 103 CalculateParameterMap(); 104 } 105 int ti = cachedParameterMap[k].Item1; 106 k = cachedParameterMap[k].Item2; 107 return terms[ti].GetGradient(i, j, k); 108 } 109 private void ClearCache() { 110 cachedParameterMap = null; 111 } 112 113 private void CalculateParameterMap() { 114 cachedParameterMap = new Dictionary<int, Tuple<int, int>>(); 115 int k = 0; 116 for (int ti = 0; ti < terms.Count; ti++) { 117 for (int ti_k = 0; ti_k < terms[ti].GetNumberOfParameters(numberOfVariables); ti_k++) { 118 cachedParameterMap[k++] = Tuple.Create(ti, ti_k); 119 } 120 } 90 121 } 91 122 }
Note: See TracChangeset
for help on using the changeset viewer.