diff options
author | Christoph Helma <helma@in-silico.ch> | 2016-10-05 13:22:12 +0200 |
---|---|---|
committer | Christoph Helma <helma@in-silico.ch> | 2016-10-05 13:22:12 +0200 |
commit | 5d4e5e463c2b87241bbb56e4658e1e26c0ed084f (patch) | |
tree | bbae8f77dbb2ac85053f1253ab518c3076e0d176 /lib/similarity.rb | |
parent | adefea0e78a4f05a2c9537e643873ad61fc22a0a (diff) |
substance and nanoparticle model creation and predictions
Diffstat (limited to 'lib/similarity.rb')
-rw-r--r-- | lib/similarity.rb | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/similarity.rb b/lib/similarity.rb index 00179c1..b9b4571 100644 --- a/lib/similarity.rb +++ b/lib/similarity.rb @@ -15,21 +15,22 @@ module OpenTox class Similarity - def self.tanimoto a, b - ( a & b).size/(a|b).size.to_f + def self.tanimoto fingerprints + ( fingerprints[0] & fingerprints[1]).size/(fingerprints[0]|fingerprints[1]).size.to_f end - def self.euclid a, b - sq = a.zip(b).map{|a,b| (a - b) ** 2} + def self.euclid fingerprints + sq = fingerprints[0].zip(fingerprints[1]).map{|a,b| (a - b) ** 2} Math.sqrt(sq.inject(0) {|s,c| s + c}) end # http://stackoverflow.com/questions/1838806/euclidean-distance-vs-pearson-correlation-vs-cosine-similarity - def self.cosine a, b - Algorithm::Vector.dot_product(a, b) / (Algorithm::Vector.magnitude(a) * Algorithm::Vector.magnitude(b)) + def self.cosine fingerprints + Algorithm::Vector.dot_product(fingerprints[0], fingerprints[1]) / (Algorithm::Vector.magnitude(fingerprints[0]) * Algorithm::Vector.magnitude(fingerprints[1])) end - def self.weighted_cosine(a, b, w) + def self.weighted_cosine fingerprints # [a,b,weights] + a, b, w = fingerprints dot_product = 0 magnitude_a = 0 magnitude_b = 0 |