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