@@ -252,13 +252,13 @@ def ewma(ndarray[double_t] input, double_t com):
252
252
253
253
@ cython.boundscheck (False )
254
254
@ cython.wraparound (False )
255
- def nancorr (ndarray[float64_t , ndim = 2 ] mat):
255
+ def nancorr (ndarray[float64_t , ndim = 2 ] mat, na_ok = False ):
256
256
cdef:
257
257
Py_ssize_t i, j, xi, yi, N, K
258
258
ndarray[float64_t, ndim= 2 ] result
259
259
ndarray[uint8_t, ndim= 2 ] mask
260
260
int64_t nobs = 0
261
- float64_t vx, vy, sumx, sumy, sumxx, sumyy, meanx, meany
261
+ float64_t vx, vy, sumx, sumy, sumxx, sumyy, meanx, meany, divisor
262
262
263
263
N, K = (< object > mat).shape
264
264
@@ -291,7 +291,12 @@ def nancorr(ndarray[float64_t, ndim=2] mat):
291
291
sumxx += vx * vx
292
292
sumyy += vy * vy
293
293
294
- result[xi, yi] = result[yi, xi] = sumx / sqrt(sumxx * sumyy)
294
+ divisor = sqrt(sumxx * sumyy)
295
+
296
+ if na_ok == 0 :
297
+ result[xi, yi] = result[yi, xi] = sumx / divisor if divisor != 0 else np.NaN
298
+ else :
299
+ result[xi, yi] = result[yi, xi] = sumx / divisor
295
300
296
301
return result
297
302
0 commit comments