#-- # 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