lib/facet/enumerable/probability.rb in facets-0.9.0 vs lib/facet/enumerable/probability.rb in facets-1.0.0
- old
+ new
@@ -1,58 +1,116 @@
-require 'nano/enumerable/probability.rb'
\ No newline at end of file
+#--
+# Credit goes to Brian Schröder for current code
+# and Derek for original.
+#++
+module Enumerable
+
+ # Generates a hash mapping each unique symbol in the array
+ # to the relative frequency, i.e. the probablity, of
+ # it appearence.
+ def probability
+ probs = Hash.new(0.0)
+ size = 0.0
+ each do | e |
+ probs[e] += 1.0
+ size += 1.0
+ end
+ probs.keys.each { |e| probs[e] /= size }
+ probs
+ end
+
+# old def
+#
+# def probability
+# arr = self.to_a
+# probHash = Hash.new
+# size = arr.size.to_f
+# arr.uniq.each do |i|
+# ct = arr.inject(0) do |mem,obj|
+# obj.eql?(i) ? (mem+1) : mem
+# end
+# probHash[i] = ct.to_f/size
+# end
+# probHash
+# end
+
+end
+
+
+
+# _____ _
+# |_ _|__ ___| |_
+# | |/ _ \/ __| __|
+# | | __/\__ \ |_
+# |_|\___||___/\__|
+#
+=begin test
+
+ require 'test/unit'
+
+ class TCEnumerable < Test::Unit::TestCase
+
+ def test_probability
+ assert_equal( {'a'=>0.5,'b'=>0.5}, %w{a b}.probability )
+ assert_equal( {'tom'=>0.5,'boy'=>0.5}, %w{tom boy}.probability )
+ end
+
+ end
+
+=end