@@ -178,52 +178,58 @@ contains
178
178
, merge(size(x, 1), size(x, 2), mask = 1<dim))
179
179
180
180
integer :: i, j, n
181
- ${t1}$ :: mean_(merge(size(x, 1), size(x, 2), mask = 1<dim))
182
- ${t1}$ :: center(size(x, 1),size(x, 2))
181
+ ${t1}$ :: centeri_(merge(size(x, 2), size(x, 1), mask = 1<dim))
182
+ ${t1}$ :: centerj_(merge(size(x, 2), size(x, 1), mask = 1<dim))
183
+ logical :: mask_(merge(size(x, 2), size(x, 1), mask = 1<dim))
183
184
184
- mean_ = mean(x, dim, mask = mask)
185
185
select case(dim)
186
186
case(1)
187
- do i = 1, size(x, 1)
188
- center(i, :) = merge( x(i, :) - mean_,&
187
+ do i = 1, size(res, 2)
188
+ do j = 1, size(res, 1)
189
+ mask_ = merge(.true., .false., mask(:, i) .and. mask(:, j))
190
+ centeri_ = merge( x(:, i) - mean(x(:, i), mask = mask_),&
189
191
#:if t1[0] == 'r'
190
192
0._${k1}$,&
191
193
#:else
192
194
cmplx(0,0,kind=${k1}$),&
193
195
#:endif
194
- mask(i, :))
195
- end do
196
- #:if t1[0] == 'r'
197
- res = matmul( transpose(center), center)
198
- #:else
199
- res = matmul( transpose(conjg(center)), center)
200
- #:endif
201
- do j = 1, size(res, 2)
202
- do i = 1, size(res, 1)
203
- n = count(merge(.true., .false., mask(:, i) .and. mask(:, j)))
204
- res(i, j) = res(i, j) / (n - merge(1, 0,&
196
+ mask_)
197
+ centerj_ = merge( x(:, j) - mean(x(:, j), mask = mask_),&
198
+ #:if t1[0] == 'r'
199
+ 0._${k1}$,&
200
+ #:else
201
+ cmplx(0,0,kind=${k1}$),&
202
+ #:endif
203
+ mask_)
204
+
205
+ n = count(mask_)
206
+ res(j, i) = dot_product( centerj_, centeri_)&
207
+ / (n - merge(1, 0,&
205
208
optval(corrected, .true.) .and. n > 0))
206
209
end do
207
210
end do
208
211
case(2)
209
- do i = 1, size(x, 2)
210
- center(:, i) = merge( x(:, i) - mean_,&
212
+ do i = 1, size(res, 2)
213
+ do j = 1, size(res, 1)
214
+ mask_ = merge(.true., .false., mask(i, :) .and. mask(j, :))
215
+ centeri_ = merge( x(i, :) - mean(x(i, :), mask = mask_),&
211
216
#:if t1[0] == 'r'
212
217
0._${k1}$,&
213
218
#:else
214
219
cmplx(0,0,kind=${k1}$),&
215
220
#:endif
216
- mask(:, i))
217
- end do
218
- #:if t1[0] == 'r'
219
- res = matmul( center, transpose(center))
220
- #:else
221
- res = matmul( center, transpose(conjg(center)))
222
- #:endif
223
- do j = 1, size(res, 2)
224
- do i = 1, size(res, 1)
225
- n = count(merge(.true., .false., mask(i, :) .and. mask(j, :)))
226
- res(i, j) = res(i, j) / (n - merge(1, 0,&
221
+ mask_)
222
+ centerj_ = merge( x(j, :) - mean(x(j, :), mask = mask_),&
223
+ #:if t1[0] == 'r'
224
+ 0._${k1}$,&
225
+ #:else
226
+ cmplx(0,0,kind=${k1}$),&
227
+ #:endif
228
+ mask_)
229
+
230
+ n = count(mask_)
231
+ res(j, i) = dot_product( centeri_, centerj_)&
232
+ / (n - merge(1, 0,&
227
233
optval(corrected, .true.) .and. n > 0))
228
234
end do
229
235
end do
@@ -246,36 +252,38 @@ contains
246
252
, merge(size(x, 1), size(x, 2), mask = 1<dim))
247
253
248
254
integer :: i, j, n
249
- real(dp) :: mean_(merge(size(x, 1), size(x, 2), mask = 1<dim))
250
- real(dp) :: center(size(x, 1),size(x, 2))
255
+ real(dp) :: centeri_(merge(size(x, 2), size(x, 1), mask = 1<dim))
256
+ real(dp) :: centerj_(merge(size(x, 2), size(x, 1), mask = 1<dim))
257
+ logical :: mask_(merge(size(x, 2), size(x, 1), mask = 1<dim))
251
258
252
- mean_ = mean(x, dim, mask = mask)
253
259
select case(dim)
254
260
case(1)
255
- do i = 1, size(x, 1)
256
- center(i, :) = merge( x(i, :) - mean_,&
257
- 0._dp,&
258
- mask(i, :))
259
- end do
260
- res = matmul( transpose(center), center)
261
- do j = 1, size(res, 2)
262
- do i = 1, size(res, 1)
263
- n = count(merge(.true., .false., mask(:, i) .and. mask(:, j)))
264
- res(i, j) = res(i, j) / (n - merge(1, 0,&
261
+ do i = 1, size(res, 2)
262
+ do j = 1, size(res, 1)
263
+ mask_ = merge(.true., .false., mask(:, i) .and. mask(:, j))
264
+ centeri_ = merge( x(:, i) - mean(x(:, i), mask = mask_),&
265
+ 0._dp, mask_)
266
+ centerj_ = merge( x(:, j) - mean(x(:, j), mask = mask_),&
267
+ 0._dp, mask_)
268
+
269
+ n = count(mask_)
270
+ res(j, i) = dot_product( centerj_, centeri_)&
271
+ / (n - merge(1, 0,&
265
272
optval(corrected, .true.) .and. n > 0))
266
273
end do
267
274
end do
268
275
case(2)
269
- do i = 1, size(x, 2)
270
- center(:, i) = merge( x(:, i) - mean_,&
271
- 0._dp,&
272
- mask(:, i))
273
- end do
274
- res = matmul( center, transpose(center))
275
- do j = 1, size(res, 2)
276
- do i = 1, size(res, 1)
277
- n = count(merge(.true., .false., mask(i, :) .and. mask(j, :)))
278
- res(i, j) = res(i, j) / (n - merge(1, 0,&
276
+ do i = 1, size(res, 2)
277
+ do j = 1, size(res, 1)
278
+ mask_ = merge(.true., .false., mask(i, :) .and. mask(j, :))
279
+ centeri_ = merge( x(i, :) - mean(x(i, :), mask = mask_),&
280
+ 0._dp, mask_)
281
+ centerj_ = merge( x(j, :) - mean(x(j, :), mask = mask_),&
282
+ 0._dp, mask_)
283
+
284
+ n = count(mask_)
285
+ res(j, i) = dot_product( centeri_, centerj_)&
286
+ / (n - merge(1, 0,&
279
287
optval(corrected, .true.) .and. n > 0))
280
288
end do
281
289
end do
0 commit comments