我有一个大小为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)计算当前的相关性。但是,我想在计算这些列之间的相关性时忽略两列都为零的条目。
任何想法,我怎么能这样做?
答案 0 :(得分:1)
您可以使用numpy非零来返回仅包含非零元素的数组,例如xnz = x[numpy.nonzero(x)]
。您需要确保使用形状等对应于简化数组xnz.shape[axis]
的大小。
您还可以使用屏蔽的arrays或将零转换为nan
并使用np.nanmean
和np.nanstd
。一般http://docs.scipy.org/doc/numpy-dev/neps/missing-data.html