/// <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); }
/// <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)); }
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)); }
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); }