Changeset 8463 for trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSum.cs
- Timestamp:
- 08/09/12 16:32:44 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSum.cs
r8455 r8463 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 100 private Dictionary<int, Tuple<int, int>> cachedParameterMap; 88 101 public double GetGradient(int i, int j, int k) { 89 int ii = 0; 90 while (k > terms[ii].GetNumberOfParameters(numberOfVariables)) { 91 k -= terms[ii].GetNumberOfParameters(numberOfVariables); 102 if (cachedParameterMap == null) { 103 CalculateParameterMap(); 92 104 } 93 return terms[ii].GetGradient(i, j, k); 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 } 94 121 } 95 122 }
Note: See TracChangeset
for help on using the changeset viewer.