22 lines
482 B
Text
22 lines
482 B
Text
function movingaverage(::Type{T} = Float64; lim::Integer = -1) where T<:Real
|
|
buffer = Vector{T}(0)
|
|
if lim == -1
|
|
# unlimited buffer
|
|
return (y::T) -> begin
|
|
push!(buffer, y)
|
|
return mean(buffer)
|
|
end
|
|
else
|
|
# limited size buffer
|
|
return (y) -> begin
|
|
push!(buffer, y)
|
|
if length(buffer) > lim shift!(buffer) end
|
|
return mean(buffer)
|
|
end
|
|
end
|
|
end
|
|
|
|
test = movingaverage()
|
|
@show test(1.0) # mean([1])
|
|
@show test(2.0) # mean([1, 2])
|
|
@show test(3.0) # mean([1, 2, 3])
|