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