Skip to content

Commit 789f84a

Browse files
authored
Update kernelpdmat to accept vector of vectors (#252)
1 parent 1983d1d commit 789f84a

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "KernelFunctions"
22
uuid = "ec8451be-7e33-11e9-00cf-bbf324bd1392"
3-
version = "0.8.23"
3+
version = "0.8.24"
44

55
[deps]
66
Compat = "34da2185-b29b-5c13-b0c7-acf172513d20"

src/matrix/kernelpdmat.jl

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,20 @@ using .PDMats: PDMat
33
export kernelpdmat
44

55
"""
6-
Compute a positive-definite matrix in the form of a `PDMat` matrix see [PDMats.jl](https://github.com/JuliaStats/PDMats.jl)
7-
with the cholesky decomposition precomputed.
8-
The algorithm recursively tries to add recursively a diagonal nugget until positive
9-
definiteness is achieved or that the noise is too big.
6+
kernelpdmat(k::Kernel, X::AbstractMatrix; obsdim::Int=2)
7+
kernelpdmat(k::Kernel, X::AbstractVector)
8+
9+
Compute a positive-definite matrix in the form of a `PDMat` matrix see [PDMats.jl](https://github.com/JuliaStats/PDMats.jl)
10+
with the cholesky decomposition precomputed.
11+
The algorithm recursively tries to add recursively a diagonal nugget until positive
12+
definiteness is achieved or until the noise is too big.
1013
"""
1114
function kernelpdmat::Kernel, X::AbstractMatrix; obsdim::Int=defaultobs)
12-
K = kernelmatrix(κ, X; obsdim=obsdim)
15+
return kernelpdmat(κ, vec_of_vecs(X; obsdim=obsdim))
16+
end
17+
18+
function kernelpdmat::Kernel, X::AbstractVector)
19+
K = kernelmatrix(κ, X)
1320
Kmax = maximum(K)
1421
α = eps(eltype(K))
1522
while !isposdef(K + α * I) && α < 0.01 * Kmax
@@ -24,7 +31,3 @@ function kernelpdmat(κ::Kernel, X::AbstractMatrix; obsdim::Int=defaultobs)
2431
end
2532
return PDMat(K + α * I)
2633
end
27-
28-
function kernelpdmat::Kernel, X::AbstractVector{<:Real}; obsdim=defaultobs)
29-
return kernelpdmat(κ, reshape(X, 1, :); obsdim=2)
30-
end

test/matrix/kernelpdmat.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
@testset "kernelpdmat" begin
22
rng = MersenneTwister(123456)
33
A = rand(rng, 10, 5)
4+
vecA = (RowVecs(A), ColVecs(A))
5+
a = rand(rng, 10)
46
k = SqExponentialKernel()
57
for obsdim in [1, 2]
68
@test all(
79
Matrix(kernelpdmat(k, A; obsdim=obsdim)) .≈
810
Matrix(PDMat(kernelmatrix(k, A; obsdim=obsdim))),
911
)
12+
@test kernelpdmat(k, vecA[obsdim]) == kernelpdmat(k, A; obsdim=obsdim)
1013
# @test_throws ErrorException kernelpdmat(k,ones(100,100),obsdim=obsdim)
1114
end
1215
end

0 commit comments

Comments
 (0)