You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
It could be useful to add a NamedTupleVariate with necessary defaults to this package. A concrete use case is that one may want a product distribution with easy access to the individual components.
Here's a barebones implementation:
using Distributions, Random
abstract type NamedTupleVariate <:VariateFormendstruct NamedTupleProductDistribution{Tnames,Tdists,eltypes,S<:ValueSupport} <:
Distribution{NamedTupleVariate,S}
dists::NamedTuple{Tnames,Tdists}endfunctionNamedTupleProductDistribution(
dists::NamedTuple{K,V}
) where {K,V<:Tuple{Vararg{Distribution}}}
eltypes = Tuple{map(eltype, values(dists))...}
# would be better to allow mixed ValueSupports here
vs = Distributions._product_valuesupport(dists)
returnNamedTupleProductDistribution{K,V,eltypes,vs}(dists)
endfunction Distributions.product_distribution(
dists::NamedTuple{K,V}
) where {K,V<:Tuple{Vararg{Distribution}}}
returnNamedTupleProductDistribution(dists)
endfunction Distributions.eltype(::NamedTupleProductDistribution{K,<:Any,V}) where {K,V}
return NamedTuple{K,V}
endfunction Distributions.insupport(
dist::NamedTupleProductDistribution{K}, x::NamedTuple{K}
) where {K}
returnall(Base.splat(insupport), zip(dist.dists, x))
endfunction Distributions.pdf(
dist::NamedTupleProductDistribution{K}, x::NamedTuple{K}
) where {K}
returnexp(logpdf(dist, x))
endfunction Distributions.logpdf(
dist::NamedTupleProductDistribution{K}, x::NamedTuple{K}
) where {K}
returnmapreduce(logpdf, +, dist.dists, x)
endfunction Distributions.rand(
rng::AbstractRNG, dist::NamedTupleProductDistribution{K}
) where {K}
returnNamedTuple{K}(map(Base.Fix1(rand, rng), dist.dists))
end
It could be useful to add a
NamedTupleVariate
with necessary defaults to this package. A concrete use case is that one may want a product distribution with easy access to the individual components.Here's a barebones implementation:
and example usage:
The text was updated successfully, but these errors were encountered: