在计算scipy中稀疏矩阵的列之间的相关性时如何忽略零

时间:2016-01-19 09:21:48

标签: python numpy scipy correlation

我有一个大小为1M亿行* 1500列的稀疏csr矩阵。我想计算列之间的相关性。

def corrcoef_csr(x, axis=0):
    '''correlation matrix, return type ndarray'''
    covx = cov_csr(x, axis=axis)
    stdx = np.sqrt(np.diag(covx))[np.newaxis,:]
    return covx/(stdx.T * stdx)

def cov_csr(x, axis=0):
    '''return covariance matrix, assumes column variable
    return type ndarray'''
    meanx = x.sum(axis=axis)/float(x.shape[axis])
    if axis == 0:
        return np.array((x.T*x)/x.shape[axis] - meanx.T*meanx)
    else:
        return np.array((x*x.T)/x.shape[axis] - meanx*meanx.T)

我正在使用corrcoef_csr(ip_matrix)计算当前的相关性。但是,我想在计算这些列之间的相关性时忽略两列都为零的条目。

任何想法,我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您可以使用numpy非零来返回仅包含非零元素的数组,例如xnz = x[numpy.nonzero(x)]。您需要确保使用形状等对应于简化数组xnz.shape[axis]的大小。

您还可以使用屏蔽的arrays或将零转换为nan并使用np.nanmeannp.nanstd。一般http://docs.scipy.org/doc/numpy-dev/neps/missing-data.html

对缺失数据进行了有趣的讨论