Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ei">Tiene que ser de tipo Numerico</param>
        /// <param name="ej">Tiene que ser de tipo Numerico</param>
        /// <returns></returns>
        private double EscalarProduct(Element ei, Element ej)
        {
            double result = 0;

            for (int i = 0; i < ei.ValuesCount; i++)
            {
                if (AttributesToCalculateProximity.Contains(ei.Attributes[i]) && !ei.IsMissing(i) && !ej.IsMissing(i))
                {
                    result += ((double)ei[i]) * ((double)ej[i]);
                }
            }

            return(result);
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="e">El elemento tiene que ser de tipo Numerico</param>
        /// <returns></returns>
        private double Norm(Element e)
        {
            double norm = 0;

            for (int i = 0; i < e.ValuesCount; i++)
            {
                if (AttributesToCalculateProximity.Contains(e.Attributes[i]) && !e.IsMissing(i))
                {
                    double c = (double)e[i];
                    norm += c * c;
                }
            }

            return(Math.Sqrt(norm));
        }
Пример #3
0
        public override double CalculateProximity(Element ei, Element ej)
        {
            base.Verify(ei, ej);
            if (ei.Set != null && ei.Set.NormValues != null)
            {
                normvalues = ei.Set.NormValues;
            }

            double result = 0;

            for (int i = 0; i < ei.ValuesCount; i++)
            {
                if (AttributesToCalculateProximity.Contains(ei.Attributes[i]) && !ei.IsMissing(i) && !ej.IsMissing(i))
                {
                    result += Math.Pow(CalculateDiff(ei, ej, ei.Attributes[i], i), 4);
                }
            }

            return(Math.Pow(result, 1.0 / 4));
        }
Пример #4
0
        public override double CalculateProximity(Element ei, Element ej)
        {
            base.Verify(ei, ej);
            if (ei.Set != null && ei.Set.NormValues != null)
            {
                normvalues = ei.Set.NormValues;
            }

            double result = double.MinValue;

            for (int i = 0; i < ei.ValuesCount; i++)
            {
                if (AttributesToCalculateProximity.Contains(ei.Attributes[i]) && !ei.IsMissing(i) && !ej.IsMissing(i))
                {
                    double temp = Math.Abs(CalculateDiff(ei, ej, ei.Attributes[i], i));
                    if (temp > result)
                    {
                        result = temp;
                    }
                }
            }

            return(result);
        }