A small Ruby snippet to calculate the Tanimoto coefficient (aka extended Jaccard coefficient) of two real vectors.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#!/usr/bin/ruby class Array def sum inject( 0 ) { |sum,x| sum+x } end def sum_square inject( 0 ) { |sum,x| sum+x*x } end def *(other) # dot_product ret = [] return nil if !other.is_a? Array || size != other.size self.each_with_index {|x, i| ret << x * other[i]} ret.sum end end def tanimoto(a, b) dot = (a * b) den = a.sum_square + b.sum_square - dot dot.to_f/den.to_f end # puts tanimoto([1,2,2],[3,3,1]) |

![Validate my Atom 1.0 feed [Valid Atom 1.0]](/images/valid-atom.png)

