Beispiel #1
0
        /// <summary>
        /// Gets specified centre.
        /// </summary>
        public List <IReadOnlyList <double> > GetCentre(ECentreMode mode, ECandidateMode iMode)
        {
            List <IReadOnlyList <double> > centre = new List <IReadOnlyList <double> >();

            this.GetCentre(mode, iMode, centre);

            return(centre);
        }
Beispiel #2
0
        /// <summary>
        /// Calculates cluster centre.
        /// </summary>
        private void GetCentre(ECentreMode mode, ECandidateMode iMode, List <IReadOnlyList <double> > centres)
        {
            centres.Clear();

            IEnumerable <IReadOnlyList <double> > list;
            int listCount;

            switch (iMode)
            {
            case ECandidateMode.Exemplars:
                list      = this.Exemplars;
                listCount = this.Exemplars.Count;
                break;

            case ECandidateMode.Assignments:
                list      = this.Assignments.Vectors.Select(z => z.Values);
                listCount = this.Assignments.List.Count;
                break;

            default:
                throw new InvalidOperationException("Invalid switch. 9B5EF96B-53F3-4651-AF7D-60B27475C7B5");
            }

            if (list.IsEmpty()) // check this function
            {
                return;
            }

            switch (mode)
            {
            case ECentreMode.All:
                //////////////////
                // ALL EXEMPLARS
            {
                foreach (IReadOnlyList <double> e in list)
                {
                    centres.Add(e);
                }
            }
            break;

            case ECentreMode.Average:
                ////////////////////////////
                // AVERGE OF ALL EXEMPLARS
            {
                int numPoints = list.First().Count;

                double[] centre = new double[numPoints];

                for (int o = 0; o < numPoints; o++)
                {
                    double total = 0;

                    foreach (IReadOnlyList <double> v in list)
                    {
                        total += v[o];
                    }

                    centre[o] = total / listCount;
                }

                centres.Add(centre);
            }
            break;
            }
        }
Beispiel #3
0
 /// <summary>
 /// Calculates cluster centre.
 /// </summary>
 public void SetCentre(ECentreMode mode, ECandidateMode iMode)
 {
     this.GetCentre(mode, iMode, this.Centres);
 }