具有两个具有nan值的数组的Pearsonr

时间:2019-09-14 16:19:44

标签: python pearson-correlation

我有两个数组,其值对应于一年中的日期。当两个数组都有值时,我试图找到数组a和b之间的相关系数。这两个数组的许多值都是nan。

from scipy import stats 
import numpy as np   

dates = np.array([2/3, 2/4, 2/5, 2/8, 2/9, 2/10, 2/11])

a = np.array([-9999., 4, 6, 7, -9999., 8, -9999.])
b = np.array([3, -9999., 5, 8, -9999., 7, 9])

a[a==-9999] = np.nan
b[b==-9999] = np.nan

r,p= stats.mstats.pearsonr(a,b)

在这种情况下,仅两个,第三和第五个索引可用于此计算,因为两个数组都没有非nan值。我已经找到了如何删除Nan的方法,但是当我这样做时,却弄乱了索引。所以对我没有用。

1 个答案:

答案 0 :(得分:0)

我只是将两个数组合并为一个数组:

c = np.vstack([a,b])
>>> array([[nan,  4.,  6.,  7., nan,  8., nan],
           [ 3., nan,  5.,  8., nan,  7.,  9.]])

删除任何包含NaN的列

d = c[:,~np.any(np.isnan(c), axis=0)]
>>> array([[6., 7., 8.],
           [5., 8., 7.]])

然后使用scipy计算相关性:

r,p= stats.mstats.pearsonr(d[0],d[1])
>>> 0.6546536707079772 0.54562894834299

或numpy:

np.correlate(d[0],d[1])
>>> 0.654653670707977