Каков быстрый способ вычисления корреляции столбца за столбцом в matlab

У меня есть две очень большие матрицы (60x25000), и я хотел бы вычислить корреляцию между столбцами только между двумя матрицами. Например:

corrVal(1) = corr(mat1(:,1), mat2(:,1);
corrVal(2) = corr(mat1(:,2), mat2(:,2);
...
corrVal(i) = corr(mat1(:,i), mat2(:,i);

Для матриц меньшего размера я могу просто использовать:

   colCorr = diag( corr( mat1, mat2 ) );

, но это не работает для очень больших матриц, поскольку у меня заканчивается память. Я подумал о том, чтобы нарезать матрицы для вычисления корреляций, а затем объединить результаты, но вычисление корреляции между комбинациями столбцов, что мне на самом деле не интересно, кажется пустой тратой.

Есть ли быстрый способ напрямую вычислить то, что мне интересно?

Изменить : Я использовал цикл в прошлом, но это просто способ замедлить:

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; 

Это занимает ~ 1 секунду

tic;
corrVal = diag(corr(mat1,mat2));
toc;

Это занимает ~ 0,2 секунды

10
задан slayton 13 February 2012 в 17:37
поделиться