module Enumerable

Public Instance Methods

concitional_entropy_with(label) click to toggle source
# File lib/enumerable_extension.rb, line 16
def concitional_entropy_with(label)
    dataset = Hash.new{|h,k| h[k] = Array.new }
    self.each_with_index{|v,i| dataset[v] << label[i] }

    new_entropy = 0.0
    dataset.each{|k,v| new_entropy += (v.size.to_f / self.size)*v.entropy }
    return new_entropy
end
covariance(arr,ddof=1) click to toggle source
# File lib/enumerable_extension.rb, line 70
def covariance(arr,ddof=1)
    raise "array length error" if arr.length!=self.length
    xbar = self.mean
    ybar = arr.mean

    accum = 0.0
    arr.length.times do |i|
        accum += (self[i]-xbar)*(arr[i]-ybar)
    end
    return accum / (self.length - ddof).to_f
end
entropy() click to toggle source
# File lib/enumerable_extension.rb, line 3
def entropy
    dataset = Hash.new(0)
    self.each{|x| dataset[x] += 1 }

    entropy = 0.0
    dataset.each do |k,v|
        p = v.to_f / self.size
        entropy += (-p)*Math.log2(p)
    end

    return entropy
end
geo_mean() click to toggle source
# File lib/enumerable_extension.rb, line 33
def geo_mean
    geo_sum = self.inject(0){|accum, i| accum + i*i }
    Math.sqrt(geo_sum)
end
l1_normalize() click to toggle source
# File lib/enumerable_extension.rb, line 86
def l1_normalize
    m = self.sum.to_f
    self.map{|x| x / m }
end
l2_normalize() click to toggle source
# File lib/enumerable_extension.rb, line 91
def l2_normalize
    m = self.geo_mean
    self.map{|x| x / m }
end
mean() click to toggle source
# File lib/enumerable_extension.rb, line 29
def mean
  self.sum / self.length.to_f
end
median() click to toggle source
# File lib/enumerable_extension.rb, line 38
def median
    sorted = self.sort
    m = sorted.length / 2
    if sorted.length.odd?
        sorted[m]
    else
        (sorted[m-1]+sorted[m])/2.0
    end
end
pearson(arr,ddof=1) click to toggle source
# File lib/enumerable_extension.rb, line 82
def pearson(arr,ddof=1)
    self.covariance(arr,ddof) / (self.stdev(ddof) * arr.stdev(ddof))
end
stdev(ddof=1) click to toggle source
# File lib/enumerable_extension.rb, line 60
def stdev(ddof=1)
    return Math.sqrt(self.variance(ddof))
end
sum() click to toggle source
# File lib/enumerable_extension.rb, line 25
def sum
  self.inject(0){|accum, i| accum + i }
end
sum_and_mean() click to toggle source
# File lib/enumerable_extension.rb, line 48
def sum_and_mean
    sum = self.sum
    mean = sum/self.length.to_f
    return sum,mean
end
variance(ddof=1) click to toggle source
# File lib/enumerable_extension.rb, line 54
def variance(ddof=1)
    m = self.mean
    sum = self.inject(0){|accum, i| accum +(i-m)**2 }
    sum / (self.length - ddof).to_f
end
variance_and_stdev(ddof=1) click to toggle source
# File lib/enumerable_extension.rb, line 64
def variance_and_stdev(ddof=1)
    sv = self.variance(ddof)
    stdev = Math.sqrt(sv)
    return sv, stdev
end