我有一个尺寸为37,000,000乘22的X矩阵,我想计算X的相关矩阵。
即,
X_corr = corr(X,'type','Spearman');
我希望X_corr的大小为22乘22。
但这需要永远,无论如何,对于如此长的矩阵,是否更快地计算相关矩阵?
谢谢!
答案 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.