Sha256: 8900642d3ab76c7c9bfb9ed89f4f70c3ccfbccdece14ac12e1482d05f05fd918

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 KB

Contents

module Enumerable
  def map_with_index(&block)
    val = []
    self.each_with_index { |e, i| val << yield(e, i) }
    val
  end
  
  def map_with_index!(&block)
    self.each_with_index do |e, i|
      val = yield(e, i)
      self[i] = val
    end
  end
  
  # Expects an array of scalars
  def scale_with(ary)
    val = []
    self.map_with_index { |e, i| val << e * ary[i] }
    val
  end
  
  def scale_with!(ary)
    self.map_with_index! { |e, i| e * ary[i] }
  end
  
  def sum
    val = any? {|e| e.is_a?(Float)} ? 0.0 : 0
    self.inject(val) {|s, e| s += e}
  end

  def average
    sum/size
  end
  alias :mean :average
  alias :avg :average

  # Returns the position (or first position) of the minimal value.  So, 
  # [3,2,1,4,5,0].min_position is 5
  def min_position
    mp = [nil, nil]
    each_with_index do |e, i|
      mp = e, i unless mp.first
      mp = e, i if e < mp.first
    end
    mp.last
  end
  
  def max_position
    mp = [nil, nil]
    each_with_index do |e, i|
      mp = e, i unless mp.first
      mp = e, i if e > mp.first
    end
    mp.last
  end
  
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
davidrichards-kmeans-0.0.3 lib/ext/enumerable.rb
davidrichards-kmeans-0.0.4 lib/ext/enumerable.rb