【发布时间】:2016-03-09 10:17:15
【问题描述】:
我需要计算一个巨大的相关矩阵,例如 200000x200000,它太大而无法存储在内存中。幸运的是,大多数值都是 0,除了接近矩阵对角线的值,我需要计算。因此,我很好奇 scipy/numpy 中的稀疏矩阵是否可以帮助我加快速度。
我目前构造数据的方式如下。
#Input variables are snps, and max_dist
num_snps, num_indivs = snps.shape
corr_table = {}
for i in range(num_snps):
corr_table[i] = {}
for i in range(0, num_snps - 1):
start_i = i + 1
end_i = min(start_i + max_dist, num_snps)
corr_vec = sp.dot(snps[i], sp.transpose(snps[start_i:end_i])) / float(num_indivs)
corr_vec = sp.array(corr_vec).flatten()
for k in range(start_i, end_i):
corr_vec_i = k - start_i
corr_table[i][k] = corr_vec[corr_vec_i]
corr_table[k][i] = corr_vec[corr_vec_i]
return corr_table
这里 snps 是一个 MxN 矩阵,具有标准化的行向量(均值 0 和方差 1),我想为此计算 MxM 相关矩阵。目前,相关矩阵存储为一个巨大的字典(corr_table)。 max_dist 表示我计算相关性的一对 SNP(snps 矩阵中的行)之间的最大距离。对于所有其他相关性(不在 corr_table 中),我假设它们为 0。
不幸的是,这在实践中仍然不是很有效,因此,我想知道是否可以将矩阵乘法与稀疏矩阵一起使用来更有效地计算相关矩阵,而无需使用更多内存。
任何建议将不胜感激。
【问题讨论】:
标签: python scipy sparse-matrix correlation bigdata