我有两个相同大小的矩阵。我想计算这些矩阵中每对行之间的相关系数; A的第1行与第1行B,A的第2行与B的第2行,依此类推。

A <- matrix(runif(1:200), nrow=20)
B <- matrix(runif(1:200), nrow=20)

我能想到的最好的是
ret <- sapply(1:20, function(i) cor(A[i,], B[i,]))

但效率极低(矩阵有成千上万的行)。有没有更好,更快的方法?

最佳答案

这应该很快:

cA <- A - rowMeans(A)
cB <- B - rowMeans(B)
sA <- sqrt(rowMeans(cA^2))
sB <- sqrt(rowMeans(cB^2))

rowMeans(cA * cB) / (sA * sB)

10-08 09:05