python - 计算大型相关矩阵的内存有效方法?

标签 python numpy matrix

<分区>

我有两个矩阵,其中变量是列,并且两个矩阵具有相同数量的样本。

一个矩阵是 800 x 200,另一个是 800 x 100000。我想计算这些矩阵的列之间的相关矩阵,所以我尝试了这个:

import numpy as np

def matcor(x, y):
    xc = x.shape[1]
    return np.corrcoef(x, y, rowvar=False)[xc:, :xc]

xy_cor = matcor(X, Y)

然而,这最终会占用大量内存,我在使用了大约 64GB 内存时出现内存错误,并且最终占用的内存可能不止于此。有没有一种内存有效的方法来计算这个?

最佳答案

不幸的是,covcorrcoef 函数不允许只直接计算xy 相关性。由于问题显然太大而无法完全解决,因此您无法计算完整矩阵并随后提取切片,而这正是您目前正在做的。相反,手动计算 xy 部分:

samples = x.shape[0]
centered_x = x - np.sum(x, axis=0, keepdims=True) / samples 
centered_y = y - np.sum(y, axis=0, keepdims=True) / samples 
cov_xy = 1./(samples - 1) * np.dot(centered_x.T, centered_y)
var_x = 1./(samples - 1) * np.sum(centered_x**2, axis=0)
var_y = 1./(samples - 1) * np.sum(centered_y**2, axis=0)
corrcoef_xy = cov_xy / np.sqrt(var_x[:, None] * var_y[None,:])

您需要方差来归一化协方差矩阵。否则,只需要前四行。

关于python - 计算大型相关矩阵的内存有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41538254/

相关文章:

javascript - 如何在 three.js 中获取 Matrix3 的逆?

python - 在 NumPy 中忽略除以 0 警告

python - 如何解决安装 mxnet 时出现 numpy 错误?

python - 如何从代码中删除 RunTimeWarning 错误?

c# - 旋转矩阵给定角度和 X、Y、Z 中的点

python - 循环遍历 .csv 文件,条件位于不同列中

python - 在 python 多处理池中共享 numpy 数组

既非真亦非假的 Python 事物

python - 如何 'clean' feedparser feed 中的所有条目

r - 如何简化这个程序?