3

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

IE,

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

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

但这需要很长时间,对于如此长的矩阵,是否有更快的计算相关矩阵?

谢谢!

4

2 回答 2

5

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

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.

但是速度差不多。

于 2012-11-10T19:04:02.880 回答
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,你可以转换为rank,然后计算Pearson,这是等价的。排序还不错:

>> X=rand(10000000,22);
>> tic;sort(X);toc
Elapsed time is 31.639637 seconds.
于 2012-11-10T18:30:43.587 回答