Package rdkit :: Package ML :: Package KNN :: Module DistFunctions

[hide private]
[frames] | no frames]

# Source Code for Module rdkit.ML.KNN.DistFunctions

     1  # $Id$
     2  #
     3  #  Copyright (C) 2003 Rational Discovery LLC
     4  #      All Rights Reserved
     5  #
     6
     7  import math
     8
     9
    10 -def EuclideanDist(ex1, ex2, attrs) :
    11      """
    12      >>> v1 = [0,1,0,1]
    13      >>> v2 = [1,0,1,0]
    14      >>> EuclideanDist(v1,v2,range(4))
    15      2.0
    16      >>> EuclideanDist(v1,v1,range(4))
    17      0.0
    18      >>> v2 = [0,0,0,1]
    19      >>> EuclideanDist(v1,v2,range(4))
    20      1.0
    21      >>> v2 = [0,.5,0,.5]
    22      >>> abs(EuclideanDist(v1,v2,range(4))-1./math.sqrt(2))<1e-4
    23      1
    24
    25      """
    26      dist = 0.0
    27      for i in attrs:
    28          dist += (ex1[i] - ex2[i])**2
    29      dist = math.sqrt(dist)
    30      return dist
    31
    32 -def TanimotoDist(ex1, ex2, attrs) :
    33      """
    34      >>> v1 = [0,1,0,1]
    35      >>> v2 = [1,0,1,0]
    36      >>> TanimotoDist(v1,v2,range(4))
    37      1.0
    38      >>> v2 = [1,0,1,1]
    39      >>> TanimotoDist(v1,v2,range(4))
    40      0.75
    41      >>> TanimotoDist(v2,v2,range(4))
    42      0.0
    43
    44      # this tests Issue 122
    45      >>> v3 = [0,0,0,0]
    46      >>> TanimotoDist(v3,v3,range(4))
    47      1.0
    48
    49      """
    50      inter = 0.0
    51      unin = 0.0
    52      for i in attrs:
    53          if (ex1[i] or ex2[i]) :
    54              unin += 1
    55              if (ex1[i] and ex2[i]) :
    56                  inter += 1
    57      if(unin != 0.0):
    58          return (1 - inter/unin)
    59      else:
    60          return 1.0
    61
    62  #------------------------------------
    63  #
    64  #  doctest boilerplate
    65  #
    66 -def _test():
    67    import doctest,sys
    68    return doctest.testmod(sys.modules["__main__"])
    69
    70  if __name__ == '__main__':
    71    import sys
    72    failed,tried = _test()
    73    sys.exit(failed)
    74