测量相关性而不计算某些值

时间:2017-06-24 19:23:45

标签: python numpy correlation

我有一个数组:

a = np.array([[1,2,3], [0,0,3], [1,2,0],[0,2,3]])

看起来像:

array([[1, 2, 3],
       [0, 0, 3],
       [1, 2, 0],
       [0, 2, 3]])

我需要计算配对关联,但没有考虑0。因此,例如,应在阵列之间计算“1”和“2”之间的相关性:

array([[1, 2],
       [1, 2]])

问题: Numpy和pandas方法会考虑零,我无法提醒他们。 所以,我需要一个更快,更自愿的内置方法。

虽然,我写了我的算法,但它在大型数组上工作得很慢。

correlations = np.zeros((1000,1000))
for i, column_i in enumerate(np.transpose(array_data)):
    for j, column_j in enumerate(np.transpose(array_data[:,i+1:])):
        if i != j:
            column_i = np.reshape(column_i,(column_i.shape[0], 1))
            column_j = np.reshape(column_j,(column_j.shape[0], 1))
            values = np.concatenate([column_i, column_j],axis=1)
            values = [row for row in values if (row[0] != 0) & (row[1] != 0)]
            values = np.array(values)
            correlation = np.corrcoef(values[:,0], values[:,1])[0][1]
            correlations[i,j] = correlation

1 个答案:

答案 0 :(得分:0)

实际上,我决定将数据中的所有零都更改为np.nan

for i,e_i in enumerate(array_data):
    for j, e_j in enumerate(e_i):
        if e_j == 0:
            array_data[i,j] = np.NaN

然后,pandas.corr()工作得很好......