3
3
kernelmatrix!(K::AbstractMatrix, κ::Kernel, X, Y; obsdim::Integer = 2)
4
4
5
5
In-place version of [`kernelmatrix`](@ref) where pre-allocated matrix `K` will be overwritten with the kernel matrix.
6
+ Will return the computed matrix `K`
6
7
"""
7
8
kernelmatrix!
8
9
@@ -16,7 +17,7 @@ function kernelmatrix!(
16
17
if ! check_dims (K, X, X, feature_dim (obsdim), obsdim)
17
18
throw (DimensionMismatch (" Dimensions of the target array K $(size (K)) are not consistent with X $(size (X)) " ))
18
19
end
19
- map! (x -> kappa (κ, x), K, pairwise (metric (κ), X, dims = obsdim))
20
+ return map! (x -> kappa (κ, x), K, pairwise (metric (κ), X, dims = obsdim))
20
21
end
21
22
22
23
function kernelmatrix! (
@@ -25,7 +26,7 @@ function kernelmatrix!(
25
26
X:: AbstractMatrix ;
26
27
obsdim:: Int = defaultobs
27
28
)
28
- kernelmatrix! (K, κ, vec_of_vecs (X, obsdim = obsdim))
29
+ return kernelmatrix! (K, κ, vec_of_vecs (X, obsdim = obsdim))
29
30
end
30
31
31
32
function kernelmatrix! (
@@ -37,6 +38,7 @@ function kernelmatrix!(
37
38
throw (DimensionMismatch (" Dimensions of the target array K $(size (K)) are not consistent with X $(size (X)) " ))
38
39
end
39
40
K .= κ .(X, X' )
41
+ return K
40
42
end
41
43
42
44
function kernelmatrix! (
@@ -50,7 +52,7 @@ function kernelmatrix!(
50
52
if ! check_dims (K, X, Y, feature_dim (obsdim), obsdim)
51
53
throw (DimensionMismatch (" Dimensions $(size (K)) of the target array K are not consistent with X ($(size (X)) ) and Y ($(size (Y)) )" ))
52
54
end
53
- map! (x -> kappa (κ, x), K, pairwise (metric (κ), X, Y, dims = obsdim))
55
+ return map! (x -> kappa (κ, x), K, pairwise (metric (κ), X, Y, dims = obsdim))
54
56
end
55
57
56
58
function kernelmatrix! (
@@ -60,8 +62,7 @@ function kernelmatrix!(
60
62
Y:: AbstractMatrix ;
61
63
obsdim:: Int = defaultobs
62
64
)
63
- kernelmatrix! (K, κ, vec_of_vecs (X, obsdim = obsdim), vec_of_vecs (Y, obsdim = obsdim))
64
-
65
+ return kernelmatrix! (K, κ, vec_of_vecs (X, obsdim = obsdim), vec_of_vecs (Y, obsdim = obsdim))
65
66
end
66
67
67
68
function kernelmatrix! (
@@ -74,6 +75,7 @@ function kernelmatrix!(
74
75
throw (DimensionMismatch (" Dimensions of the target array K $(size (K)) are not consistent with X $(size (X)) and Y $(size (Y)) " ))
75
76
end
76
77
K .= κ .(X, Y' )
78
+ return K
77
79
end
78
80
79
81
"""
@@ -86,21 +88,17 @@ Calculate the kernel matrix of `X` (and `Y`) with respect to kernel `κ`.
86
88
"""
87
89
kernelmatrix
88
90
89
- function kernelmatrix (κ:: Kernel , X:: AbstractVector )
90
- kernelmatrix (κ, X, X) # TODO Can be optimized later
91
- end
91
+ kernelmatrix (κ:: Kernel , X:: AbstractVector ) = kernelmatrix (κ, X, X)
92
92
93
- function kernelmatrix (κ:: Kernel , X:: AbstractVector , Y:: AbstractVector )
94
- κ .(X, Y' )
95
- end
93
+ kernelmatrix (κ:: Kernel , X:: AbstractVector , Y:: AbstractVector ) = κ .(X, Y' )
96
94
97
95
function kernelmatrix (κ:: SimpleKernel , X:: AbstractMatrix ; obsdim:: Int = defaultobs)
98
96
@assert obsdim ∈ [1 , 2 ] " obsdim should be 1 or 2 (see docs of `kernelmatrix`))"
99
- K = map (x -> kappa (κ, x), pairwise (metric (κ), X, dims = obsdim))
97
+ return map (x -> kappa (κ, x), pairwise (metric (κ), X, dims = obsdim))
100
98
end
101
99
102
100
function kernelmatrix (κ:: Kernel , X:: AbstractMatrix ; obsdim:: Int = defaultobs)
103
- kernelmatrix (κ, vec_of_vecs (X, obsdim = obsdim))
101
+ return kernelmatrix (κ, vec_of_vecs (X, obsdim = obsdim))
104
102
end
105
103
106
104
function kernelmatrix (
@@ -113,11 +111,11 @@ function kernelmatrix(
113
111
if ! check_dims (X, Y, feature_dim (obsdim))
114
112
throw (DimensionMismatch (" X $(size (X)) and Y $(size (Y)) do not have the same number of features on the dimension : $(feature_dim (obsdim)) " ))
115
113
end
116
- map (x -> kappa (κ, x), pairwise (metric (κ), X, Y, dims = obsdim))
114
+ return map (x -> kappa (κ, x), pairwise (metric (κ), X, Y, dims = obsdim))
117
115
end
118
116
119
117
function kernelmatrix (κ:: Kernel , X:: AbstractMatrix , Y:: AbstractMatrix ; obsdim:: Int = defaultobs)
120
- kernelmatrix (κ, vec_of_vecs (X, obsdim = obsdim), vec_of_vecs (Y, obsdim = obsdim))
118
+ return kernelmatrix (κ, vec_of_vecs (X, obsdim = obsdim), vec_of_vecs (Y, obsdim = obsdim))
121
119
end
122
120
123
121
"""
@@ -134,12 +132,10 @@ function kerneldiagmatrix(
134
132
X:: AbstractMatrix ;
135
133
obsdim:: Int = defaultobs
136
134
)
137
- kerneldiagmatrix (κ, vec_of_vecs (X, obsdim = obsdim))
135
+ return kerneldiagmatrix (κ, vec_of_vecs (X, obsdim = obsdim))
138
136
end
139
137
140
- function kerneldiagmatrix (κ:: Kernel , X:: AbstractVector )
141
- κ .(X, X)
142
- end
138
+ kerneldiagmatrix (κ:: Kernel , X:: AbstractVector ) = κ .(X, X)
143
139
144
140
"""
145
141
kerneldiagmatrix!(K::AbstractVector, κ::Kernel, X; obsdim::Int = 2)
@@ -151,21 +147,20 @@ function kerneldiagmatrix!(
151
147
κ:: Kernel ,
152
148
X:: AbstractMatrix ;
153
149
obsdim:: Int = defaultobs
154
- )
150
+ )
155
151
if length (K) != size (X,obsdim)
156
152
throw (DimensionMismatch (" Dimensions of the target array K $(size (K)) are not consistent with X $(size (X)) " ))
157
153
end
158
- kerneldiagmatrix! (K, κ, vec_of_vecs (X, obsdim = obsdim))
159
- return K
154
+ return kerneldiagmatrix! (K, κ, vec_of_vecs (X, obsdim = obsdim))
160
155
end
161
156
162
157
function kerneldiagmatrix! (
163
158
K:: AbstractVector ,
164
159
κ:: Kernel ,
165
160
X:: AbstractVector
166
- )
161
+ )
167
162
if length (K) != length (X)
168
163
throw (DimensionMismatch (" Dimensions of the target array K $(size (K)) are not consistent with X $(length (X)) " ))
169
164
end
170
- map! (κ, K, X, X)
165
+ return map! (κ, K, X, X)
171
166
end
0 commit comments