1
1
# Mahalanobis distances
2
2
3
- immutable Mahalanobis{T} <: Metric
3
+ struct Mahalanobis{T} <: Metric
4
4
qmat:: Matrix{T}
5
5
end
6
6
7
- immutable SqMahalanobis{T} <: SemiMetric
7
+ struct SqMahalanobis{T} <: SemiMetric
8
8
qmat:: Matrix{T}
9
9
end
10
10
11
- result_type {T} (:: Mahalanobis{T} , :: AbstractArray , :: AbstractArray ) = T
12
- result_type {T} (:: SqMahalanobis{T} , :: AbstractArray , :: AbstractArray ) = T
11
+ result_type (:: Mahalanobis{T} , :: AbstractArray , :: AbstractArray ) where {T} = T
12
+ result_type (:: SqMahalanobis{T} , :: AbstractArray , :: AbstractArray ) where {T} = T
13
13
14
14
# SqMahalanobis
15
15
16
- function evaluate {T<:AbstractFloat} (dist:: SqMahalanobis{T} , a:: AbstractVector , b:: AbstractVector )
16
+ function evaluate (dist:: SqMahalanobis{T} , a:: AbstractVector , b:: AbstractVector ) where {T <: AbstractFloat }
17
17
if length (a) != length (b)
18
18
throw (DimensionMismatch (" first array has length $(length (a)) which does not match the length of the second, $(length (b)) ." ))
19
19
end
25
25
26
26
sqmahalanobis (a:: AbstractVector , b:: AbstractVector , Q:: AbstractMatrix ) = evaluate (SqMahalanobis (Q), a, b)
27
27
28
- function colwise! {T<:AbstractFloat} (r:: AbstractArray , dist:: SqMahalanobis{T} , a:: AbstractMatrix , b:: AbstractMatrix )
28
+ function colwise! (r:: AbstractArray , dist:: SqMahalanobis{T} , a:: AbstractMatrix , b:: AbstractMatrix ) where {T <: AbstractFloat }
29
29
Q = dist. qmat
30
30
m, n = get_colwise_dims (size (Q, 1 ), r, a, b)
31
31
z = a - b
32
32
dot_percol! (r, Q * z, z)
33
33
end
34
34
35
- function colwise! {T<:AbstractFloat} (r:: AbstractArray , dist:: SqMahalanobis{T} , a:: AbstractVector , b:: AbstractMatrix )
35
+ function colwise! (r:: AbstractArray , dist:: SqMahalanobis{T} , a:: AbstractVector , b:: AbstractMatrix ) where {T <: AbstractFloat }
36
36
Q = dist. qmat
37
37
m, n = get_colwise_dims (size (Q, 1 ), r, a, b)
38
38
z = a .- b
39
39
Qz = Q * z
40
40
dot_percol! (r, Q * z, z)
41
41
end
42
42
43
- function pairwise! {T<:AbstractFloat} (r:: AbstractMatrix , dist:: SqMahalanobis{T} , a:: AbstractMatrix , b:: AbstractMatrix )
43
+ function pairwise! (r:: AbstractMatrix , dist:: SqMahalanobis{T} , a:: AbstractMatrix , b:: AbstractMatrix ) where {T <: AbstractFloat }
44
44
Q = dist. qmat
45
45
m, na, nb = get_pairwise_dims (size (Q, 1 ), r, a, b)
46
46
@@ -58,7 +58,7 @@ function pairwise!{T<:AbstractFloat}(r::AbstractMatrix, dist::SqMahalanobis{T},
58
58
r
59
59
end
60
60
61
- function pairwise! {T<:AbstractFloat} (r:: AbstractMatrix , dist:: SqMahalanobis{T} , a:: AbstractMatrix )
61
+ function pairwise! (r:: AbstractMatrix , dist:: SqMahalanobis{T} , a:: AbstractMatrix ) where {T <: AbstractFloat }
62
62
Q = dist. qmat
63
63
m, n = get_pairwise_dims (size (Q, 1 ), r, a)
64
64
81
81
82
82
# Mahalanobis
83
83
84
- function evaluate {T<:AbstractFloat} (dist:: Mahalanobis{T} , a:: AbstractVector , b:: AbstractVector )
84
+ function evaluate (dist:: Mahalanobis{T} , a:: AbstractVector , b:: AbstractVector ) where {T <: AbstractFloat }
85
85
sqrt (evaluate (SqMahalanobis (dist. qmat), a, b))
86
86
end
87
87
88
88
mahalanobis (a:: AbstractVector , b:: AbstractVector , Q:: AbstractMatrix ) = evaluate (Mahalanobis (Q), a, b)
89
89
90
- function colwise! {T<:AbstractFloat} (r:: AbstractArray , dist:: Mahalanobis{T} , a:: AbstractMatrix , b:: AbstractMatrix )
90
+ function colwise! (r:: AbstractArray , dist:: Mahalanobis{T} , a:: AbstractMatrix , b:: AbstractMatrix ) where {T <: AbstractFloat }
91
91
sqrt! (colwise! (r, SqMahalanobis (dist. qmat), a, b))
92
92
end
93
93
94
- function colwise! {T<:AbstractFloat} (r:: AbstractArray , dist:: Mahalanobis{T} , a:: AbstractVector , b:: AbstractMatrix )
94
+ function colwise! (r:: AbstractArray , dist:: Mahalanobis{T} , a:: AbstractVector , b:: AbstractMatrix ) where {T <: AbstractFloat }
95
95
sqrt! (colwise! (r, SqMahalanobis (dist. qmat), a, b))
96
96
end
97
97
98
- function pairwise! {T<:AbstractFloat} (r:: AbstractMatrix , dist:: Mahalanobis{T} , a:: AbstractMatrix , b:: AbstractMatrix )
98
+ function pairwise! (r:: AbstractMatrix , dist:: Mahalanobis{T} , a:: AbstractMatrix , b:: AbstractMatrix ) where {T <: AbstractFloat }
99
99
sqrt! (pairwise! (r, SqMahalanobis (dist. qmat), a, b))
100
100
end
101
101
102
- function pairwise! {T<:AbstractFloat} (r:: AbstractMatrix , dist:: Mahalanobis{T} , a:: AbstractMatrix )
102
+ function pairwise! (r:: AbstractMatrix , dist:: Mahalanobis{T} , a:: AbstractMatrix ) where {T <: AbstractFloat }
103
103
sqrt! (pairwise! (r, SqMahalanobis (dist. qmat), a))
104
104
end
0 commit comments