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

2024-10-06 11:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个稀疏的csr矩阵,大小为100万行*1500列。我想计算列之间的相关性。在

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)计算当前相关性。但是,在计算这些列之间的相关性时,我想忽略两列都为零的条目。在

知道吗,我怎么能做到?在


Tags: returndeftypenpcovarraymatrixndarray
1条回答
网友
1楼 · 发布于 2024-10-06 11:28:10

您可以使用numpy non-zero返回只包含非零元素的数组,例如xnz = x[numpy.nonzero(x)]。您需要确保shape等的使用与缩减数组xnz.shape[axis]的大小相对应。在

您还可以使用掩码arrays或将零转换为nan,并使用np.nanmean和{}。{a2中有一个有趣的讨论^缺少数据}

相关问题 更多 >