class MadMath::Stats

Public Class Methods

new(data) click to toggle source
# File lib/mad_math/stats.rb, line 3
def initialize(data)
  @data = data
end

Public Instance Methods

average() click to toggle source
# File lib/mad_math/stats.rb, line 12
def average
  @average ||= sum / count.to_f
end
count() click to toggle source
# File lib/mad_math/stats.rb, line 21
def count
  @count ||= @data.size
end
load() click to toggle source
# File lib/mad_math/stats.rb, line 7
def load
  stdev
  self
end
max() click to toggle source
# File lib/mad_math/stats.rb, line 37
def max
  @max ||= @data.max
end
min() click to toggle source
# File lib/mad_math/stats.rb, line 41
def min
  @min ||= @data.min
end
stdev() click to toggle source
# File lib/mad_math/stats.rb, line 29
def stdev
  @stdev ||= Math.sqrt(sum_of_squares / (count - 1))
end
stdevp() click to toggle source
# File lib/mad_math/stats.rb, line 33
def stdevp
  @stdevp ||= Math.sqrt(sum_of_squares / count)
end
sum() click to toggle source

reduce with the symbol (non-block form) seems most performant

# File lib/mad_math/stats.rb, line 17
def sum
  @sum ||= @data.reduce(:+)
end
sum_of_squares() click to toggle source
# File lib/mad_math/stats.rb, line 25
def sum_of_squares
  @sum_of_squares ||= get_sum_of_squares
end

Private Instance Methods

get_sum_of_squares() click to toggle source
# File lib/mad_math/stats.rb, line 47
def get_sum_of_squares
  @max = @data.first
  @min = @data.first
  @data.map do |num|
    @max = num if @max < num
    @min = num if @min > num
    (num - average) ** 2
  end.reduce(:+)
end