Skip to content

Commit a681d13

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

File tree

1 file changed

+16
-58
lines changed

1 file changed

+16
-58
lines changed

src/moments.jl

Lines changed: 16 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -161,87 +161,45 @@ 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)
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))
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)
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(i -> (@inbounds (z = (v[i] - m); z * z * z * wv[i])), eachindex(v))
180+
return s/sum(wv)
202181
end
203182

204183
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
184+
s = sum(x-> (z = x-m; abs2(z*z)), v)
185+
return s/length(v)
212186
end
213187

214188
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)
189+
s = sum(i -> (@inbounds (z = (v[i] - m); abs2(z * z) * wv[i])), eachindex(v))
190+
return s/sum(wv)
222191
end
223192

224193
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
194+
s = sum(x -> (x - m)^k, v)
195+
return s/length(v)
232196
end
233197

234198
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)
199+
s = sum(i -> (@inbounds (z = (v[i] - m); z^k * wv[i])), eachindex(v))
200+
return s/sum(wv)
242201
end
243202

244-
245203
"""
246204
moment(v, k, [wv::AbstractWeights], m=mean(v))
247205

0 commit comments

Comments
 (0)