matlab相关矩阵的一个巨大矩阵

matlab相关矩阵的一个巨大矩阵,matlab,matrix,correlation,Matlab,Matrix,Correlation,我有一个尺寸为37000000乘22的X矩阵,我想计算X的相关矩阵 即 X_corr = corr(X,'type','Spearman'); 我希望X_corr的尺寸是22乘22 但是这需要很长的时间,对于这样长的矩阵,有没有更快的计算相关矩阵 谢谢 试试corrcoef(): 此外,这几乎是您想要的(我没有足够的内存用于37e6x22): 编辑: 如果你想要斯皮尔曼,你可以转换成等级,然后计算皮尔森,这是等价的。排序并不是那么糟糕: >> X=rand(10000000,22)

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

X_corr = corr(X,'type','Spearman');
我希望X_corr的尺寸是22乘22

但是这需要很长的时间,对于这样长的矩阵,有没有更快的计算相关矩阵

谢谢

试试corrcoef():

此外,这几乎是您想要的(我没有足够的内存用于37e6x22):

编辑:

如果你想要斯皮尔曼,你可以转换成等级,然后计算皮尔森,这是等价的。排序并不是那么糟糕:

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

受@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.

但是速度差不多。

@按位抱歉,22乘22,谢谢你的澄清。除非你在X中有特殊的结构可以利用,否则恐怕需要O(n log(n)).
corrcoef
我认为只计算皮尔逊的相关性。@Memming Spearman在文本中没有明确要求,只是在代码中。他也可以排名然后再做皮尔逊,这是等效的。对。但是在这种情况下排名将占用大部分计算。@Memming它将占用大部分计算,但仍然可能比co更快rr()-请参阅我的编辑。
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.