-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathVariableStatistics.jl
More file actions
44 lines (37 loc) · 1.47 KB
/
VariableStatistics.jl
File metadata and controls
44 lines (37 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function Statistics.mean(vartype::StateType, args...; kwargs...)
return mean(getManifold(vartype), args...; kwargs...)
end
function Statistics.std(vartype::StateType, args...; kwargs...)
return std(getManifold(vartype), args...; kwargs...)
end
function Statistics.var(vartype::StateType, args...; kwargs...)
return var(getManifold(vartype), args...; kwargs...)
end
function Statistics.cov(
vartype::StateType,
ptsArr::AbstractVector;
basis::Manifolds.AbstractBasis = Manifolds.DefaultOrthogonalBasis(),
kwargs...,
)
return cov(getManifold(vartype), ptsArr; basis, kwargs...)
end
#TODO check performance and FIXME on makemutalbe might not be needed any more
function calcStdBasicSpread(vartype::StateType, ptsArr::AbstractVector) # {P}) where {P}
# _makemutable(s) = s
# _makemutable(s::StaticArray{Tuple{S},T,N}) where {S,T,N} = MArray{Tuple{S},T,N,S}(s)
# _makemutable(s::SMatrix{N,N,T,D}) where {N,T,D} = MMatrix{N,N,T,D}(s)
# FIXME, silly conversion since Manifolds.std internally replicates eltype ptsArr which doesn't work on StaticArrays
# σ = std(vartype, _makemutable.(ptsArr))
μ = mean(vartype, ptsArr, GeodesicInterpolation())
σ = std(vartype, ptsArr, μ)
#if no std yet, set to 1
msst = 1e-10 < σ ? σ : 1.0
return msst
end
#TODO consolidate
function calcMeanCovar(vari::VariableCompute, solvekey = :default)
pts = DFG.refPoints(getState(vari, solvekey))
μ = mean(getManifold(vari), pts)
Σ = cov(getStateKind(vari), pts)
return μ, Σ
end