如何将大型稀疏协方差矩阵转换为稀疏相关矩阵?
稀疏协方差矩阵转相关矩阵的实现方案
小规模矩阵处理方法
参考statsmodels.stats.moment_helpers.cov2corr()的实现逻辑,当协方差矩阵规模不大时,可通过逐元素除以密集的标准差外积,再转换回稀疏矩阵的方式得到相关矩阵,示例代码如下:
import numpy as np from scipy import sparse A = np.array([ [1.0, 0.2, 0.3, 0.0, 0.0], [0.2, 2.0, 1.0, 0.0, 0.0], [0.3, 1.0, 3.0, 0.0, 0.0], [0.0, 0.0, 0.0, 1.0, 0.5], [0.0, 0.0, 0.0, 0.5, 4.0]]) cov = sparse.csr_matrix(A) cor = sparse.csr_matrix(cov / np.outer(np.sqrt(cov.diagonal()), np.sqrt(cov.diagonal()))) cor.toarray()
执行上述代码后,输出结果为:
array([[1. , 0.14142136, 0.17320508, 0. , 0. ], [0.14142136, 1. , 0.40824829, 0. , 0. ], [0.17320508, 0.40824829, 1. , 0. , 0. ], [0. , 0. , 0. , 1. , 0.25 ], [0. , 0. , 0. , 0.25 , 1. ]])
大规模矩阵的内存问题
当矩阵规模达到100K及以上时,生成密集的n×n标准差外积会造成严重的内存浪费,甚至直接超出内存承载上限,上述方法不再适用。
内容的提问来源于stack exchange,提问作者Giora Simchoni
相关产品推荐
相关产品推荐

