Module: DTW::Metrics::Cosine

Defined in:
lib/dtwrb/metrics.rb,
sig/dtwrb.rbs

Class Method Summary collapse

Class Method Details

.call(left, right) ⇒ ::Float

Parameters:

  • (frame)
  • (frame)

Returns:

  • (::Float)


64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/dtwrb/metrics.rb', line 64

def self.call(left, right)
  Metrics.assert_conformable!(left, right)

  product = 0.0
  left_norm = 0.0
  right_norm = 0.0
  axis = 0
  while axis < left.length
    product += left[axis] * right[axis]
    left_norm += left[axis] * left[axis]
    right_norm += right[axis] * right[axis]
    axis += 1
  end

  return 0.0 if left_norm.zero? && right_norm.zero?
  return 1.0 if left_norm.zero? || right_norm.zero?

  1.0 - (product / Math.sqrt(left_norm * right_norm))
end