Sha256: a3ba01e95979de6dc4dcf227ed55b97232336286bd426523af65afc73b5895df

Contents?: true

Size: 941 Bytes

Versions: 10

Compression:

Stored size: 941 Bytes

Contents

require 'facets/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  #=>
  #
  # CREDIT: Derek

  def entropy
    arr = 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

  # Returns the maximum possible Shannon entropy of the array
  # with given size assuming that it is an "order-0" source
  # (each element is selected independently of the next).
  #
  # CREDIT: Derek

  def ideal_entropy
    arr = to_a
    unitProb = 1.0.to_f / arr.size.to_f
    (-1.to_f * arr.size.to_f * unitProb * Math.log(unitProb)/Math.log(2.to_f))
  end

end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
facets-2.8.4 lib/core/facets/enumerable/entropy.rb
facets-2.8.3 lib/core/facets/enumerable/entropy.rb
facets-2.8.2 lib/core/facets/enumerable/entropy.rb
facets-2.8.1 lib/core/facets/enumerable/entropy.rb
facets-2.8.0 lib/core/facets/enumerable/entropy.rb
facets-2.7.0 lib/core/facets/enumerable/entropy.rb
facets-2.6.0 lib/core/facets/enumerable/entropy.rb
facets-2.5.1 lib/core/facets/enumerable/entropy.rb
facets-2.5.0 lib/core/facets/enumerable/entropy.rb
facets-2.5.2 lib/core/facets/enumerable/entropy.rb