Tengo dos matrices muy grandes (60x25000) y me gustaría calcular la correlación entre las columnas solo entre las dos matrices. Por ejemplo:¿Cuál es una forma rápida de calcular la correlación columna por columna en matlab
corrVal(1) = corr(mat1(:,1), mat2(:,1);
corrVal(2) = corr(mat1(:,2), mat2(:,2);
...
corrVal(i) = corr(mat1(:,i), mat2(:,i);
Para matrices más pequeñas que simplemente puede utilizar:
colCorr = diag(corr(mat1, mat2));
pero esto no funciona para matrices muy grandes que me quede sin memoria. Consideré dividir las matrices para calcular las correlaciones y luego combinar los resultados, pero me parece un desperdicio calcular la correlación entre las combinaciones de columnas que realmente no me interesan.
¿Existe una manera rápida de calcular directamente lo que me interesa?
Editar: He usado un bucle en el pasado, pero es sólo a modo lento:
mat1 = rand(60,5000);
mat2 = rand(60,5000);
nCol = size(mat1,2);
corrVal = zeros(nCol,1);
tic;
for i = 1:nCol
corrVal(i) = corr(mat1(:,i), mat2(:,i));
end
toc;
Esta toma ~ 1 segundo
tic;
corrVal = diag(corr(mat1,mat2));
toc;
Esto tarda unos 0,2 segundos
He hecho una edición de su publicación; por favor revisa si es correcto. – Jacob
Además, ¿qué pasa con lo obvio para el ciclo? – Jacob
la edición es correcta, ¡gracias! También el ciclo es forma de ralentizar – slayton