Class: Centroid
Instance Attribute Summary collapse
-
#position ⇒ Object
Returns the value of attribute position.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(position) ⇒ Centroid
constructor
A new instance of Centroid.
-
#reposition(nodes, centroids) ⇒ Object
Finds the average distance of all the nodes assigned to the centroid and then moves the centroid to that position.
Constructor Details
#initialize(position) ⇒ Centroid
Returns a new instance of Centroid.
32 33 34 |
# File 'lib/k_means/centroid.rb', line 32 def initialize(position) @position = position end |
Instance Attribute Details
#position ⇒ Object
Returns the value of attribute position.
30 31 32 |
# File 'lib/k_means/centroid.rb', line 30 def position @position end |
Class Method Details
.create_centroids(amount, nodes) ⇒ Object
4 5 6 7 8 9 10 11 12 |
# File 'lib/k_means/centroid.rb', line 4 def create_centroids(amount, nodes) ranges = create_ranges(nodes, nodes[0].position.size) (1..amount).map do position = ranges.inject([]) do |array, range| array << rand_between(range[0], range[1]) end new(position) end end |
Instance Method Details
#reposition(nodes, centroids) ⇒ Object
Finds the average distance of all the nodes assigned to the centroid and then moves the centroid to that position
38 39 40 41 42 43 44 45 46 47 |
# File 'lib/k_means/centroid.rb', line 38 def reposition(nodes, centroids) return if nodes.empty? averages = [0.0] * nodes[0].position.size nodes.each do |node| node.position.each_with_index do |position, index| averages[index] += position end end @position = averages.map {|x| x / nodes.size} end |