Skip to content

Commit 465a85d

Browse files
committed
central_moment: n and mean computed outside select case
1 parent de37112 commit 465a85d

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/stdlib_experimental_stats_moment.fypp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,13 @@ contains
8282
return
8383
end if
8484

85+
n = size(x, dim)
86+
mean = sum(x, dim) / n
87+
8588
res = 0
8689
select case(dim)
8790
#:for fi in range(1, rank+1)
8891
case(${fi}$)
89-
n = size(x, dim)
90-
mean = sum(x, dim) / n
9192
do i = 1, size(x, dim)
9293
res = res + (x${select_subarray(rank, [(fi, 'i')])}$ - mean)**order
9394
end do
@@ -121,12 +122,13 @@ contains
121122
return
122123
end if
123124

125+
n = size(x, dim)
126+
mean = sum(real(x, dp), dim) / n
127+
124128
res = 0
125129
select case(dim)
126130
#:for fi in range(1, rank+1)
127131
case(${fi}$)
128-
n = size(x, dim)
129-
mean = sum(real(x, dp), dim) / n
130132
do i = 1, size(x, dim)
131133
res = res + (real(x${select_subarray(rank, [(fi, 'i')])}$, dp) - mean)**order
132134
end do
@@ -198,12 +200,13 @@ contains
198200
real(${k1}$) :: n${reduced_shape('x', rank, 'dim')}$
199201
${t1}$ :: mean${reduced_shape('x', rank, 'dim')}$
200202

203+
n = count(mask, dim)
204+
mean = sum(x, dim, mask) / n
205+
201206
res = 0
202207
select case(dim)
203208
#:for fi in range(1, rank+1)
204209
case(${fi}$)
205-
n = count(mask, dim)
206-
mean = sum(x, dim, mask) / n
207210
do i = 1, size(x, dim)
208211
res = res + merge( (x${select_subarray(rank, [(fi, 'i')])}$ - mean)**order,&
209212
#:if t1[0] == 'r'
@@ -238,12 +241,13 @@ contains
238241
real(dp) :: n${reduced_shape('x', rank, 'dim')}$
239242
real(dp) :: mean${reduced_shape('x', rank, 'dim')}$
240243

244+
n = count(mask, dim)
245+
mean = sum(real(x, dp), dim, mask) / n
246+
241247
res = 0
242248
select case(dim)
243249
#:for fi in range(1, rank+1)
244250
case(${fi}$)
245-
n = count(mask, dim)
246-
mean = sum(real(x, dp), dim, mask) / n
247251
do i = 1, size(x, dim)
248252
res = res + merge((real(x${select_subarray(rank, [(fi, 'i')])}$, dp) - mean)**order,&
249253
0._dp, mask${select_subarray(rank, [(fi, 'i')])}$)

0 commit comments

Comments
 (0)