matlab巨大矩阵的相关矩阵

时间:2012-11-10 18:19:52

标签: matlab matrix correlation

我有一个尺寸为37,000,000乘22的X矩阵,我想计算X的相关矩阵。

即,

X_corr = corr(X,'type','Spearman');

我希望X_corr的大小为22乘22。

但这需要永远,无论如何,对于如此长的矩阵,是否更快地计算相关矩阵?

谢谢!

2 个答案:

答案 0 :(得分:5)

受@ Bitwise解决方案的启发,我研究了corr的实现。 (你可以通过简单地输入edit corr来实现。它有一个变量对的循环,因为它想要处理NaN。如果你的数据中没有NaN,你可以简单地计算Spearman的相关性: / p>

X = rand(3e6, 22);
R = tiedrank(X); % Elapsed time is 8.956700 seconds.
C = corrcoef(X); % Elapsed time is 0.579448 seconds.

应该与

相同
C2 = corr(X, 'type', 'Spearman'); Elapsed time is 9.501480 seconds.

但它的速度大致相同。

答案 1 :(得分:2)

尝试corrcoef():

>> X=rand(1000000,22);
>> tic;corr(X);toc
Elapsed time is 18.320141 seconds.
>> tic;corrcoef(X);toc
Elapsed time is 0.494406 seconds

这也几乎是你想要的(我没有足够的内存用于37e6x22):

>> X=rand(10000000,22);
>> tic;corrcoef(X);toc
Elapsed time is 7.620509 seconds.

修改

如果你想要Spearman,你可以转换为排名,然后计算Pearson,这是等价的。排序并不是那么糟糕:

>> X=rand(10000000,22);
>> tic;sort(X);toc
Elapsed time is 31.639637 seconds.