Class: DbClustering::DistanceMetrics::AverageDifference

Inherits:
Object
  • Object
show all
Includes:
Math
Defined in:
lib/distance_metrics/average_difference.rb

Instance Method Summary collapse

Constructor Details

#initialize(min_dimensions: 1) ⇒ AverageDifference

Returns a new instance of AverageDifference.



6
7
8
# File 'lib/distance_metrics/average_difference.rb', line 6

def initialize(min_dimensions: 1)
  @min_dimensions = min_dimensions
end

Instance Method Details

#distance(vector1, vector2) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/distance_metrics/average_difference.rb', line 10

def distance(vector1, vector2)
  vector1_array = vector1.array_for_comparison(vector2)
  vector2_array = vector2.array_for_comparison(vector1)

  if vector1_array.count != vector2_array.count
    raise "Vectors with different sizes cannot be compared"
  end

  if vector1_array.count < @min_dimensions
    return Float::INFINITY
  end

  sum = vector1_array.map.with_index{ |x, i| (x - vector2_array[i]).abs }.reduce(&:+)
  sum / vector1_array.count.to_f
end