@@ -177,6 +177,46 @@ function result_type{T1, T2}(dist::SpanNormDist, ::AbstractArray{T1}, ::Abstract
177
177
end
178
178
179
179
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
+
180
220
# ##########################################################
181
221
#
182
222
# Special method
@@ -229,6 +269,7 @@ function pairwise!(r::AbstractMatrix, dist::Euclidean, a::AbstractMatrix, b::Abs
229
269
end
230
270
r
231
271
end
272
+
232
273
function pairwise! (r:: AbstractMatrix , dist:: Euclidean , a:: AbstractMatrix )
233
274
m:: Int , n:: Int = get_pairwise_dims (r, a)
234
275
At_mul_B! (r, a, a)
@@ -246,46 +287,7 @@ function pairwise!(r::AbstractMatrix, dist::Euclidean, a::AbstractMatrix)
246
287
r
247
288
end
248
289
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
289
291
290
292
function pairwise! (r:: AbstractMatrix , dist:: CosineDist , a:: AbstractMatrix , b:: AbstractMatrix )
291
293
m:: Int , na:: Int , nb:: Int = get_pairwise_dims (r, a, b)
330
332
function pairwise! (r:: AbstractMatrix , dist:: CorrDist , a:: AbstractMatrix )
331
333
pairwise! (r, CosineDist (), _centralize_colwise (a))
332
334
end
333
-
334
-
335
-
336
-
337
-
0 commit comments