Skip to content

Commit 6a310a4

Browse files
author
Guy
committed
pr fixups
1 parent aca38e7 commit 6a310a4

File tree

2 files changed

+44
-47
lines changed

2 files changed

+44
-47
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ Each distance corresponds to a distance type. The type name and the correspondin
132132
| Chebyshev | chebyshev(x, y) | max(abs(x - y)) |
133133
| Minkowski | minkowski(x, y, p) | sum(abs(x - y).^p) ^ (1/p) |
134134
| Hamming | hamming(x, y) | sum(x .!= y) |
135-
| Rogers-Tanimoto | rogerstanimoto(x, y)| (2(ntf + nft)) / (2(ntf + nft) + ntt + nff) |
136-
| Jaccard | jaccard(x, y) | 1 - (sum(min(xi, yi)) / sum(max(xi, yi))) |
135+
| Rogers-Tanimoto | rogerstanimoto(x, y)| 2(sum(x&!y) + sum(!x&y)) / (2(sum(x&!y) + sum(!x&y)) + sum(x&y) + sum(!x&!y)) |
136+
| Jaccard | jaccard(x, y) | 1 - sum(min(x, y)) / sum(max(x, y)) |
137137
| CosineDist | cosine_dist(x, y) | 1 - dot(x, y) / (norm(x) * norm(y)) |
138138
| CorrDist | corr_dist(x, y) | cosine_dist(x - mean(x), y - mean(y)) |
139139
| ChiSqDist | chisq_dist(x, y) | sum((x - y).^2 / (x + y)) |

src/metrics.jl

Lines changed: 42 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,46 @@ function result_type{T1, T2}(dist::SpanNormDist, ::AbstractArray{T1}, ::Abstract
177177
end
178178

179179

180+
# Jaccard
181+
182+
@compat @inline eval_start(::Jaccard, a::AbstractArray, b::AbstractArray) = 0, 0
183+
@compat @inline function eval_op(::Jaccard, s1, s2)
184+
denominator = max(s1, s2)
185+
numerator = min(s1, s2)
186+
numerator, denominator
187+
end
188+
@compat @inline function eval_reduce(::Jaccard, s1, s2)
189+
a = s1[1] + s2[1]
190+
b = s1[2] + s2[2]
191+
a, b
192+
end
193+
@compat @inline eval_end(::Jaccard, a) = 1 - (a[1]/a[2])
194+
jaccard(a::AbstractArray, b::AbstractArray) = evaluate(Jaccard(), a, b)
195+
196+
# Tanimoto
197+
198+
@compat @inline eval_start(::RogersTanimoto, a::AbstractArray, b::AbstractArray) = 0, 0, 0, 0
199+
@compat @inline function eval_op(::RogersTanimoto, s1, s2)
200+
tt = s1 && s2
201+
tf = s1 && !s2
202+
ft = !s1 && s2
203+
ff = !s1 && !s2
204+
tt, tf, ft, ff
205+
end
206+
@compat @inline function eval_reduce(::RogersTanimoto, s1, s2)
207+
a = s1[1] + s2[1]
208+
b = s1[2] + s2[2]
209+
c = s1[3] + s2[3]
210+
d = s1[4] + s1[4]
211+
a, b, c, d
212+
end
213+
@compat @inline function eval_end(::RogersTanimoto, a)
214+
numerator = 2(a[2] + a[3])
215+
denominator = a[1] + a[4] + 2(a[2] + a[3])
216+
numerator / denominator
217+
end
218+
rogerstanimoto{T <: Bool}(a::AbstractArray{T}, b::AbstractArray{T}) = evaluate(RogersTanimoto(), a, b)
219+
180220
###########################################################
181221
#
182222
# Special method
@@ -229,6 +269,7 @@ function pairwise!(r::AbstractMatrix, dist::Euclidean, a::AbstractMatrix, b::Abs
229269
end
230270
r
231271
end
272+
232273
function pairwise!(r::AbstractMatrix, dist::Euclidean, a::AbstractMatrix)
233274
m::Int, n::Int = get_pairwise_dims(r, a)
234275
At_mul_B!(r, a, a)
@@ -246,46 +287,7 @@ function pairwise!(r::AbstractMatrix, dist::Euclidean, a::AbstractMatrix)
246287
r
247288
end
248289

249-
# Jaccard
250-
251-
@compat @inline eval_start(::Jaccard, a::AbstractArray, b::AbstractArray) = 0, 0
252-
@compat @inline function eval_op(::Jaccard, s1, s2)
253-
denominator = max(s1, s2)
254-
numerator = min(s1, s2)
255-
numerator, denominator
256-
end
257-
@compat @inline function eval_reduce(::Jaccard, s1, s2)
258-
a = s1[1] + s2[1]
259-
b = s1[2] + s2[2]
260-
a, b
261-
end
262-
@compat @inline eval_end(::Jaccard, a) = 1 - (a[1]/a[2])
263-
jaccard(a::AbstractArray, b::AbstractArray) = evaluate(Jaccard(), a, b)
264-
265-
# Tanimoto
266-
267-
@compat @inline eval_start(::RogersTanimoto, a::AbstractArray, b::AbstractArray) = 0, 0, 0, 0
268-
@compat @inline function eval_op(::RogersTanimoto, s1, s2)
269-
tt = s1 && s2
270-
tf = s1 && !s2
271-
ft = !s1 && s2
272-
ff = !s1 && !s2
273-
tt, tf, ft, ff
274-
end
275-
@compat @inline function eval_reduce(::RogersTanimoto, s1, s2)
276-
a = s1[1] + s2[1]
277-
b = s1[2] + s2[2]
278-
c = s1[3] + s2[3]
279-
d = s1[4] + s1[4]
280-
a, b, c, d
281-
end
282-
@compat @inline function eval_end(::RogersTanimoto, a)
283-
numerator = 2(a[2] + a[3])
284-
denominator = a[1] + a[4] + 2(a[2] + a[3])
285-
numerator / denominator
286-
end
287-
rogerstanimoto{T <: Bool}(a::AbstractArray{T}, b::AbstractArray{T}) = evaluate(RogersTanimoto(), a, b)
288-
290+
# CosineDist
289291

290292
function pairwise!(r::AbstractMatrix, dist::CosineDist, a::AbstractMatrix, b::AbstractMatrix)
291293
m::Int, na::Int, nb::Int = get_pairwise_dims(r, a, b)
@@ -330,8 +332,3 @@ end
330332
function pairwise!(r::AbstractMatrix, dist::CorrDist, a::AbstractMatrix)
331333
pairwise!(r, CosineDist(), _centralize_colwise(a))
332334
end
333-
334-
335-
336-
337-

0 commit comments

Comments
 (0)