Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

« Newer Snippets
Older Snippets »
Showing 1-1 of 1 total  RSS 

Weighted Mean

Weighted mean ( http://en.wikipedia.org/wiki/Mean#Weighted_arithmetic_mean )

class Array
  #sum (and mean) found on http://snippets.dzone.com/posts/show/2161
  def sum
    inject( nil ) { |sum,x| sum ? sum + x.to_f : x.to_f }
  end
  
  def mean
    sum.to_f / size
  end
  
  #http://en.wikipedia.org/wiki/Mean#Weighted_arithmetic_mean
  def weighted_mean(weights_array)
    raise "Each element of the array must have an accompanying weight.  Array length = #{self.size} versus Weights length = #{weights_array.size}" if weights_array.size != self.size
    w_sum = weights_array.sum
    w_prod = 0
    self.each_index {|i| w_prod += self[i] * weights_array[i].to_f}
    w_prod.to_f / w_sum.to_f
  end
end


Example
>> a = [1,2,3]
=> [1, 2, 3]
>> w = [1,1,1]
=> [1, 1, 1]
>> a.weighted_arithmetic_mean(w)
=> 2.0
>> a.mean
=> 2.0
>> w = [5,2,1]
=> [5, 2, 1]
>> a.weighted_arithmetic_mean(w)
=> 1.5
« Newer Snippets
Older Snippets »
Showing 1-1 of 1 total  RSS