#-- # Credit goes to Derek. #++ require 'facet/enumerable/ideal_entropy' require 'facet/enumerable/probability' module Enumerable # Shannon's entropy for an array - returns the average # bits per symbol required to encode the array. # Lower values mean less "entropy" - i.e. less unique # information in the array. # # %w{ a b c d e e e }.entropy #=> # def entropy arr = self.to_a probHash = arr.probability # h is the Shannon entropy of the array h = -1.to_f * probHash.keys.inject(0.to_f) do |sum, i| sum + (probHash[i] * (Math.log(probHash[i])/Math.log(2.to_f))) end h end end class String def entropy self.split(//).entropy end end # _____ _ # |_ _|__ ___| |_ # | |/ _ \/ __| __| # | | __/\__ \ |_ # |_|\___||___/\__| # =begin test require 'test/unit' class TCEnumerable < Test::Unit::TestCase def test_entropy assert_equal( 1.0, %w{ a b }.entropy ) end end =end