Averages/Simple moving average: Difference between revisions
Content added Content deleted
(→{{header|Java}}: consistent formatting) |
|||
Line 2,008: | Line 2,008: | ||
=={{header|Julia}}== |
=={{header|Julia}}== |
||
{{works with|Julia|0.6}} |
|||
A short version that buffers all numbers seen from the start. |
|||
The function wants specified the type of the data in the buffer and, if you want, the limit of the buffer. |
|||
<lang Julia>SMA(N) = let buffer = Number[] |
|||
<lang julia>function movingaverage(::Type{T} = Float64; lim::Integer = -1) where T<:Real |
|||
x -> (push!(buffer, x) ; mean(buffer[max(1,end-N+1):end])) |
|||
buffer = Vector{T}(0) |
|||
end</lang> |
|||
if lim == -1 |
|||
A version with a buffer of size at most N. An initial value can be |
|||
# unlimited buffer |
|||
⚫ | |||
<lang Julia>SMA(N, buffer = Number[]) = |
|||
push!(buffer, y) |
|||
⚫ | |||
return mean(buffer) |
|||
end |
|||
⚫ | |||
else |
|||
⚫ | |||
# limited size buffer |
|||
end</lang> |
|||
return (y) -> begin |
|||
⚫ | |||
push!(buffer, y) |
|||
<pre>julia> test = SMA(3) ; test(1), test(2), test(3), test(4), test(5) |
|||
⚫ | |||
(1.0,1.5,2.0,3.0,4.0)</pre> |
|||
⚫ | |||
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])</lang> |
|||
⚫ | |||
<pre>test(1.0) = 1.0 |
|||
test(2.0) = 1.5 |
|||
test(3.0) = 2.0</pre> |
|||
=={{header|K}}== |
=={{header|K}}== |