module Cluda

Constants

VERSION

Public Instance Methods

median(list) click to toggle source
# File lib/cluda/cluda_common.rb, line 72
def median(list)
  sorted_list = list.sort
  len = list.size

  sorted_list[((len / 2) + 0.5).floor]
end
median_for_centroid(centroid, points) click to toggle source
# File lib/cluda/cluda_common.rb, line 68
def median_for_centroid(centroid, points)
  median(points[centroid].map { |point| point[:distance] })
end
median_for_centroids(points) click to toggle source

For an output given by CluDA calculate the means for each centroid

Example:

> clusters = {{:x=>2, :y=>2}=>
                         [{:x=>1, :y=>1, :distance=>1.4142135623730951},
                          {:x=>2, :y=>1, :distance=>1.0},
                          {:x=>1, :y=>2, :distance=>1.0},
                          {:x=>2, :y=>2, :distance=>0.0}]}
> Cluda.median_for_centroids(clusters)

Arguments:

points:            ( Hash )
# File lib/cluda/cluda_common.rb, line 22
def median_for_centroids(points)
  points.each_key do |centroid|
    validate_smart_points(points[centroid])
  end

  points.keys.map do |centroid|
    centroid.merge(median: median_for_centroid(centroid, points))
  end
end
valid_class?(name) click to toggle source
# File lib/cluda/cluda_common.rb, line 32
def valid_class?(name)
  %w[euclidean chebyshev manhattan].include?(name.downcase)
end
validate(data) click to toggle source
# File lib/cluda/cluda_common.rb, line 60
def validate(data)
  data = [data] unless data.is_a?(Array)

  data.each do |point|
    raise InvalidPoint unless point.is_a?(Hash) && point[:x].is_a?(Numeric) && point[:y].is_a?(Numeric)
  end
end
validate_centroids(centroids) click to toggle source
# File lib/cluda/cluda_common.rb, line 36
def validate_centroids(centroids)
  centroids = centroids.is_a?(Array) ? centroids : [centroids]

  validate(centroids)

  centroids.each do |point|
    raise InvalidCentroid unless point.include?(:median)
  end

  centroids
end
validate_smart_points(points) click to toggle source
# File lib/cluda/cluda_common.rb, line 48
def validate_smart_points(points)
  points = points.is_a?(Array) ? points : [points]

  validate(points)

  points.each do |point|
    raise InvalidSmartPoint unless point.include?(:distance)
  end

  points
end