1
1
#:include "common.fypp"
2
2
3
- #:set RANKS = range(3 , MAXRANK + 1)
3
+ #:set RANKS = range(1 , MAXRANK + 1)
4
4
5
5
6
6
submodule (stdlib_experimental_stats) stdlib_experimental_stats_mean
@@ -10,88 +10,6 @@ submodule (stdlib_experimental_stats) stdlib_experimental_stats_mean
10
10
11
11
contains
12
12
13
- #:for k1, t1 in REAL_KINDS_TYPES
14
- module function mean_1_${k1}$_${k1}$(x) result(res)
15
- ${t1}$, intent(in) :: x(:)
16
- ${t1}$ :: res
17
-
18
- res = sum(x) / real(size(x, kind = int64), ${k1}$)
19
-
20
- end function mean_1_${k1}$_${k1}$
21
- #:endfor
22
-
23
-
24
- #:for k1, t1 in INT_KINDS_TYPES
25
- module function mean_1_${k1}$_dp(x) result(res)
26
- ${t1}$, intent(in) :: x(:)
27
- real(dp) :: res
28
-
29
- res = sum(real(x, dp)) / real(size(x, kind = int64), dp)
30
-
31
- end function mean_1_${k1}$_dp
32
- #:endfor
33
-
34
-
35
- #:for k1, t1 in REAL_KINDS_TYPES
36
- module function mean_2_all_${k1}$_${k1}$(x) result(res)
37
- ${t1}$, intent(in) :: x(:,:)
38
- ${t1}$ :: res
39
-
40
- res = sum(x) / real(size(x, kind = int64), ${k1}$)
41
-
42
- end function mean_2_all_${k1}$_${k1}$
43
- #:endfor
44
-
45
-
46
- #:for k1, t1 in INT_KINDS_TYPES
47
- module function mean_2_all_${k1}$_dp(x) result(res)
48
- ${t1}$, intent(in) :: x(:,:)
49
- real(dp) :: res
50
-
51
- res = sum(real(x, dp)) / real(size(x, kind = int64), dp)
52
-
53
- end function mean_2_all_${k1}$_dp
54
- #:endfor
55
-
56
-
57
- #:for k1, t1 in REAL_KINDS_TYPES
58
- module function mean_2_${k1}$_${k1}$(x, dim) result(res)
59
- ${t1}$, intent(in) :: x(:,:)
60
- integer, intent(in) :: dim
61
- ${t1}$ :: res(merge(size(x, 1), size(x, 2), mask = 1 < dim ))
62
-
63
- select case(dim)
64
- case(1)
65
- res = sum(x, 1) / real(size(x, 1), ${k1}$)
66
- case(2)
67
- res = sum(x, 2) / real(size(x, 2), ${k1}$)
68
- case default
69
- call error_stop("ERROR (mean): wrong dimension")
70
- end select
71
-
72
- end function mean_2_${k1}$_${k1}$
73
- #:endfor
74
-
75
-
76
- #:for k1, t1 in INT_KINDS_TYPES
77
- module function mean_2_${k1}$_dp(x, dim) result(res)
78
- ${t1}$, intent(in) :: x(:,:)
79
- integer, intent(in) :: dim
80
- real(dp) :: res(merge(size(x, 1), size(x, 2), mask = 1 < dim ))
81
-
82
- select case(dim)
83
- case(1)
84
- res = sum(real(x, dp), 1) / real(size(x, 1), dp)
85
- case(2)
86
- res = sum(real(x, dp), 2) / real(size(x, 2), dp)
87
- case default
88
- call error_stop("ERROR (mean): wrong dimension")
89
- end select
90
-
91
- end function mean_2_${k1}$_dp
92
- #:endfor
93
-
94
-
95
13
#:for k1, t1 in REAL_KINDS_TYPES
96
14
#:for rank in RANKS
97
15
module function mean_${rank}$_all_${k1}$_${k1}$(x) result(res)
@@ -123,22 +41,13 @@ contains
123
41
module function mean_${rank}$_${k1}$_${k1}$(x, dim) result(res)
124
42
${t1}$, intent(in) :: x${ranksuffix(rank)}$
125
43
integer, intent(in) :: dim
126
- ${t1}$ :: res( &
127
- #:for imerge in range(1,rank-1)
128
- merge(size(x,${imerge}$),size(x,${imerge + 1}$),&
129
- & mask = ${imerge}$ < dim ), &
130
- #:endfor
131
- & merge(size(x,${rank-1}$),size(x,${rank}$),&
132
- & mask = ${rank-1}$ < dim ))
133
-
134
- select case(dim)
135
- #:for fi in range(1,rank+1)
136
- case(${fi}$)
137
- res=sum(x, ${fi}$) / real(size(x, ${fi}$), ${k1}$)
138
- #:endfor
139
- case default
44
+ ${t1}$ :: res${reduced_shape('x', rank, 'dim')}$
45
+
46
+ if (dim >= 1 .and. dim <= ${rank}$) then
47
+ res = sum(x, dim) / real(size(x, dim), ${k1}$)
48
+ else
140
49
call error_stop("ERROR (mean): wrong dimension")
141
- end select
50
+ end if
142
51
143
52
end function mean_${rank}$_${k1}$_${k1}$
144
53
#:endfor
@@ -148,24 +57,15 @@ contains
148
57
#:for k1, t1 in INT_KINDS_TYPES
149
58
#:for rank in RANKS
150
59
module function mean_${rank}$_${k1}$_dp(x, dim) result(res)
151
- ${t1}$, intent(in) :: x${ranksuffix(rank)}$
152
- integer, intent(in) :: dim
153
- real(dp) :: res( &
154
- #:for imerge in range(1,rank-1)
155
- & merge(size(x, ${imerge}$), size(x, ${imerge + 1}$),&
156
- & mask = ${imerge}$ < dim ), &
157
- #:endfor
158
- & merge(size(x,${rank-1}$),size(x,${rank}$),&
159
- & mask = ${rank-1}$ < dim ))
160
-
161
- select case(dim)
162
- #:for fi in range(1,rank+1)
163
- case(${fi}$)
164
- res = sum(real(x, dp), ${fi}$) / real(size(x, ${fi}$), dp)
165
- #:endfor
166
- case default
167
- call error_stop("ERROR (mean): wrong dimension")
168
- end select
60
+ ${t1}$, intent(in) :: x${ranksuffix(rank)}$
61
+ integer, intent(in) :: dim
62
+ real(dp) :: res${reduced_shape('x', rank, 'dim')}$
63
+
64
+ if (dim >= 1 .and. dim <= ${rank}$) then
65
+ res = sum(x, dim) / real(size(x, dim), dp)
66
+ else
67
+ call error_stop("ERROR (mean): wrong dimension")
68
+ end if
169
69
170
70
end function mean_${rank}$_${k1}$_dp
171
71
#:endfor
0 commit comments