Exemple #1
0
 /// <summary>
 /// Adds each element of vec to corresponding element of addTo vector
 /// addTo vector is being changed in place
 /// </summary>
 public static void AddInPlace(SparseVector <double> addTo, SparseVector <double> vec)
 {
     foreach (var vecIdx in vec.InnerIdx)
     {
         var num = addTo.TryGet(vecIdx, 0.0);
         addTo[vecIdx] = num + vec[vecIdx];
     }
 }
Exemple #2
0
        /// <summary>
        /// Divides each element of dividee with corresponding element of divisor in place
        /// Dividee is being changed
        /// </summary>
        public static void DivideInPlace(SparseVector <double> dividee, SparseVector <double> divisor)
        {
            foreach (var divIdx in divisor.InnerIdx)
            {
                var num = dividee.TryGet(divIdx, 0.0);
                if (num < Double.Epsilon)
                {
                    continue;
                }

                dividee[divIdx] = num / divisor[divIdx];
            }
        }
Exemple #3
0
        public static SparseVector <double> Add(SparseVector <double> v1, SparseVector <double> v2)
        {
            var newVector = new SparseVector <double>();
            var v1LastI   = v1.Count > 0 ? v1.Last.Idx : 0;
            var v2LastI   = v2.Count > 0 ? v2.Last.Idx : 0;
            var limit     = Math.Max(v1LastI, v2LastI);

            for (int i = 0; i < limit; i++)
            {
                var sum = v1.TryGet(i, 0.0) + v2.TryGet(i, 0.0);
                if (sum > Double.Epsilon)
                {
                    newVector[i] = sum;
                }
            }

            return(newVector);
        }
Exemple #4
0
 public T TryGet(int idx, T defaultVal)
 {
     return(mVec.TryGet(idx, defaultVal));
 }