我需要在n x n类型的矩阵上工作(通常n> 100),一个小例子如下:
mymat <- as.matrix(cbind(V1 = c(11, 12, 13, 14),V2 = c(21, 22, 23, 24),
V3 = c( 31, 32, 33, 34), V4 = c(41, 42, 43, 44) ) )
row.names (mymat) <- c("a", "b", "c", "d")
V1 V2 V3 V4
a 11 21 31 41
b 12 22 32 42
c 13 23 33 43
d 14 24 34 44
我需要研究元素(指矩阵元素(2,1)和(1,2)或(3,4)和(4,3)等等:
mymat[1,2] * ( mymat[1,2] + mymat[2,1]) = 12 * (12 + 21) = 396
完整的操作将包括Yij(Yij + Yji),对于矩阵对角线的元素,它将是:
mymat[2,2] * (mymat[2,2] + mymat[2,2]) = 22 * (22 + 22) = 968
因此完整的操作将是:
11 * (11 + 11) + 12 * (12 + 21) + 13 * (13 + 31) + 14 * (14 + 41) +
21 * (21 * 12) + 22 * (22 + 22) + 23 * (23 + 32) + 24 * ( 24 + 42) +
31 * ( 13 + 31) + 32 * (23 + 32) + 33 * ( 33 + 33) + 34 * (34 + 43) +
44 * (44 + 44) = 22881
抱歉,我无法理解,需要你的帮助。
答案 0 :(得分:5)
你是说这个吗?
myMatrix = mymat
myProductSum = myMatrix * (myMatrix + t(myMatrix))
myTotal = sum(myProductSum)
这些是您所概述的计算,即元素总和,然后是元素乘积,然后是整个矩阵的求和。
如果出于某种原因,你想为对角线元素做一些不同的事情,你可以调整以下内容:
myDiag = diag(diag(mymat))
myMatrix = mymat - myDiag
myProductSum = myMatrix * (myMatrix + t(myMatrix))
myTotal = sum(myProductSum) + sum(2 * myDiag^2)