我有一个尺寸为 37,000,000 x 22 的 X 矩阵,我想计算 X 的相关矩阵。
IE,
X_corr = corr(X,'type','Spearman');
我希望 X_corr 的大小为 22 x 22。
但这需要很长时间,对于如此长的矩阵,是否有更快的计算相关矩阵?
谢谢!
我有一个尺寸为 37,000,000 x 22 的 X 矩阵,我想计算 X 的相关矩阵。
IE,
X_corr = corr(X,'type','Spearman');
我希望 X_corr 的大小为 22 x 22。
但这需要很长时间,对于如此长的矩阵,是否有更快的计算相关矩阵?
谢谢!
受@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.
但是速度差不多。
试试 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.