我有一个稀疏的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)计算当前相关性。但是,在计算这些列之间的相关性时,我想忽略两列都为零的条目。在
知道吗,我怎么能做到?在
您可以使用numpy non-zero返回只包含非零元素的数组,例如
xnz = x[numpy.nonzero(x)]
。您需要确保shape等的使用与缩减数组xnz.shape[axis]
的大小相对应。在您还可以使用掩码arrays或将零转换为}。{a2中有一个有趣的讨论^缺少数据}
nan
,并使用np.nanmean
和{相关问题 更多 >
编程相关推荐