我有两个非常大的矩阵(60x25000),我想仅计算这两个矩阵之间列之间的相关性。
corrVal(1) = corr(mat1(:,1), mat2(:,1);
corrVal(2) = corr(mat1(:,2), mat2(:,2);
...
corrVal(i) = corr(mat1(:,i), mat2(:,i);
对于较小的矩阵,我可以简单地使用:
colCorr = diag( corr( mat1, mat2 ) );
但是当我处理非常大的矩阵时,这种方法会导致内存不足。我考虑了将矩阵分片以计算相关性,然后再组合结果,但似乎计算那些我实际上不感兴趣的列组合之间的相关性是浪费的。
有没有一种快速的方法可以直接计算我感兴趣的内容?
编辑:过去我曾使用循环,但它太慢了:
mat1 = rand(60,5000);
mat2 = rand(60,5000);
nCol = size(mat1,2);
corrVal = zeros(nCol,1);
tic;
for i = 1:nCol
corrVal(i) = corr(mat1(:,i), mat2(:,i));
end
toc;
这需要大约1秒钟的时间
tic;
corrVal = diag(corr(mat1,mat2));
toc;
这需要大约0.2秒钟的时间