Ho due matrici molto grandi (60x25000) e vorrei calcolare la correlazione tra le colonne solo tra le due matrici. Ad esempio:Qual è un modo veloce per calcolare la correlazione colonna per colonna in MATLAB
corrVal(1) = corr(mat1(:,1), mat2(:,1);
corrVal(2) = corr(mat1(:,2), mat2(:,2);
...
corrVal(i) = corr(mat1(:,i), mat2(:,i);
per matrici inferiori posso semplicemente utilizzare:
colCorr = diag(corr(mat1, mat2));
ma questo non funziona molto grandi matrici come ho esaurito la memoria. Ho considerato di affettare le matrici per calcolare le correlazioni e poi combinare i risultati, ma mi sembra uno spreco calcolare la correlazione tra le combinazioni di colonne che non sono realmente interessato.
C'è un modo rapido per calcolare direttamente ciò che mi interessa?
Edit: ho usato un ciclo in passato, ma il suo solo modo per rallentare:
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;
Questo richiede ~ 1 secondo
tic;
corrVal = diag(corr(mat1,mat2));
toc;
Questo richiede ~ 0,2 secondi
Ho apportato una modifica al tuo post; per favore controlla se è corretto – Jacob
Inoltre, cosa c'è di sbagliato nell'ovvio ciclo? – Jacob
la modifica è corretta, grazie! Anche il ciclo è un modo per rallentare – slayton