class MoreMath::Histogram
A histogram gives an overview of a sequence’s elements.
def compute
def compute @sequence.empty? and return [] last_r = -Infinity min = @sequence.min max = @sequence.max step = (max - min) / bins.to_f Array.new(bins) do |i| l = min + i * step r = min + (i + 1) * step c = 0 @sequence.each do |x| x > last_r and (x <= r || i == bins - 1) and c += 1 end last_r = r [ l, c, r ] end end
def display(output = $stdout, width = 50)
Display this histogram to +output+, +width+ is the parameter for
def display(output = $stdout, width = 50) d = prepare_display(width) for l, bar, r in d output << "%11.5f -|%s\n" % [ (l + r) / 2.0, "*" * bar ] end self end
def initialize(sequence, bins = 10)
def initialize(sequence, bins = 10) @sequence = sequence @bins = bins @result = compute end
def prepare_display(width)
edge. +width+ is usually an integer number representing the width of a
the +width+-normalized frequence count value, and +r+ the right bin
Returns an array of tuples (l, c, r) where +l+ is the left bin edge, +c+
def prepare_display(width) r = @result.reverse factor = width.to_f / (r.transpose[1].max) r.map { |l, c, r| [ l, (c * factor).round, r ] } end
def to_a
def to_a @result end