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
|