Skip to content

Commit 8cbd195

Browse files
committed
rewrite the _momentX methods in more functional style
1 parent 77e63df commit 8cbd195

File tree

1 file changed

+28
-58
lines changed

1 file changed

+28
-58
lines changed

src/moments.jl

Lines changed: 28 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -161,87 +161,57 @@ end
161161

162162
##### General central moment
163163
function _moment2(v::AbstractArray{<:Real}, m::Real; corrected=false)
164-
n = length(v)
165-
s = 0.0
166-
for i = 1:n
167-
@inbounds z = v[i] - m
168-
s += z * z
169-
end
170-
varcorrection(n, corrected) * s
164+
s = sum(x->abs2(x-m), v, init=zero(m))
165+
return varcorrection(length(v), corrected) * s
171166
end
172167

173168
function _moment2(v::AbstractArray{<:Real}, wv::AbstractWeights, m::Real; corrected=false)
174-
n = length(v)
175-
s = 0.0
176-
for i = 1:n
177-
@inbounds z = v[i] - m
178-
@inbounds s += (z * z) * wv[i]
179-
end
180-
181-
varcorrection(wv, corrected) * s
169+
s = sum(i -> (@inbounds abs2(v[i] - m) * wv[i]), eachindex(v), init=zero(m))
170+
return varcorrection(wv, corrected) * s
182171
end
183172

184173
function _moment3(v::AbstractArray{<:Real}, m::Real)
185-
n = length(v)
186-
s = 0.0
187-
for i = 1:n
188-
@inbounds z = v[i] - m
189-
s += z * z * z
190-
end
191-
s / n
174+
s = sum(x->(x-m)^3, v, init=zero(m))
175+
return s/length(v)
192176
end
193177

194178
function _moment3(v::AbstractArray{<:Real}, wv::AbstractWeights, m::Real)
195-
n = length(v)
196-
s = 0.0
197-
for i = 1:n
198-
@inbounds z = v[i] - m
199-
@inbounds s += (z * z * z) * wv[i]
200-
end
201-
s / sum(wv)
179+
s = sum(
180+
i -> (@inbounds (z = (v[i] - m); z * z * z * wv[i])),
181+
eachindex(v),
182+
init=zero(m),
183+
)
184+
return s/sum(wv)
202185
end
203186

204187
function _moment4(v::AbstractArray{<:Real}, m::Real)
205-
n = length(v)
206-
s = 0.0
207-
for i = 1:n
208-
@inbounds z = v[i] - m
209-
s += abs2(z * z)
210-
end
211-
s / n
188+
s = sum(x-> (z = x-m; abs2(z*z)), v, init=zero(m))
189+
return s/length(v)
212190
end
213191

214192
function _moment4(v::AbstractArray{<:Real}, wv::AbstractWeights, m::Real)
215-
n = length(v)
216-
s = 0.0
217-
for i = 1:n
218-
@inbounds z = v[i] - m
219-
@inbounds s += abs2(z * z) * wv[i]
220-
end
221-
s / sum(wv)
193+
s = sum(
194+
i -> (@inbounds (z = (v[i] - m); abs2(z * z) * wv[i])),
195+
eachindex(v),
196+
init=zero(m),
197+
)
198+
return s/sum(wv)
222199
end
223200

224201
function _momentk(v::AbstractArray{<:Real}, k::Int, m::Real)
225-
n = length(v)
226-
s = 0.0
227-
for i = 1:n
228-
@inbounds z = v[i] - m
229-
s += (z ^ k)
230-
end
231-
s / n
202+
s = sum(x -> (x - m)^k, v, init=zero(m))
203+
return s/length(v)
232204
end
233205

234206
function _momentk(v::AbstractArray{<:Real}, k::Int, wv::AbstractWeights, m::Real)
235-
n = length(v)
236-
s = 0.0
237-
for i = 1:n
238-
@inbounds z = v[i] - m
239-
@inbounds s += (z ^ k) * wv[i]
240-
end
241-
s / sum(wv)
207+
s = sum(
208+
i -> (@inbounds (z = (v[i] - m); z^k * wv[i])),
209+
eachindex(v),
210+
init=zero(m),
211+
)
212+
return s/sum(wv)
242213
end
243214

244-
245215
"""
246216
moment(v, k, [wv::AbstractWeights], m=mean(v))
247217

0 commit comments

Comments
 (0)