OnlineStatsBase.jl
OnlineStatsBase.jl copied to clipboard
Prod - Track the overall prod.
Hello,
quite similar to Sum
... Prod
could track the overall product.
I haven't find such a statistics.
Implementing it could be interesting.
Kind regards
PS: here is an implementation idea inspired by Sum implementation
"""
Prod(T::Type = Float64)
Track the overall prod.
"""
mutable struct Prod{T} <: OnlineStat{Number}
prod::T
n::Int
end
Prod(T::Type = Float64) = Prod(one(T), 0)
Base.prod(o::Prod) = o.prod
OnlineStatsBase._fit!(o::Prod{T}, x::Real) where {T<:AbstractFloat} = (o.prod *= convert(T, x); o.n += 1)
OnlineStatsBase._fit!(o::Prod{T}, x::Real) where {T<:Integer} = (o.prod *= round(T, x); o.n += 1)
OnlineStatsBase._fit!(o::Prod{T}, x::Real, n) where {T<:AbstractFloat} = (o.prod *= convert(T, x * n); o.n += n)
OnlineStatsBase._fit!(o::Prod{T}, x::Real, n) where {T<:Integer} = (o.prod *= round(T, x * n); o.n += n)
OnlineStatsBase._merge!(o::T, o2::T) where {T <: Prod} = (o.prod *= o2.prod; o.n += o2.n; o)
PS2: here is my use cases https://github.com/femtotrader/OnlinePortfolioAnalytics.jl/blob/9ab6010cfb604c1484cd338609c47b643a001750/src/mean_return.jl#L40 https://github.com/femtotrader/OnlinePortfolioAnalytics.jl/blob/9ab6010cfb604c1484cd338609c47b643a001750/src/drawdowns.jl#L14 https://github.com/femtotrader/OnlinePortfolioAnalytics.jl/blob/9ab6010cfb604c1484cd338609c47b643a001750/src/cumulative_return.jl#L12