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