How do I calculate the correlation between the rows two large matrices?
4 次查看(过去 30 天)
显示 更早的评论
Hello,
I have two matrices, both 224000x150, and I need to calculate the correlation between each pair of matching rows.
I wanted to use something like that:
corr_values = corr (A(:,:)', B(:,:)');
row_to_row_corr = diag(corr_values);
but "corr_values" will then be 224000x224000 matrix, and it's too large for MATLAB
(I get the following error message:_
Error using *
Requested 224770x224770 (376.4GB) array exceeds maximum array size preference (31.8GB). This might cause MATLAB to become unresponsive.
Is there a solution to that, instead of doing it in a loop, row-by-row?
Thanks
2 个评论
Karim
2022-11-13
You can try to use sparse matrices.
More information --> Create sparse matrix - MATLAB sparse - MathWorks Benelux
采纳的回答
Bruno Luong
2022-11-13
编辑:Bruno Luong
2022-11-13
Just use the formula of correlation
% Fake data for testing
A = rand(10,5);
B = rand(10,5);
Ac = A - mean(A,2);
Bc = B - mean(B,2);
C = dot(Ac,Bc,2)./sqrt(dot(Ac,Ac,2).*dot(Bc,Bc,2))
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!