R:矩阵运算[新版本]

时间:2011-11-03 01:23:16

标签: r matrix

我需要在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

抱歉,我无法理解,需要你的帮助。

1 个答案:

答案 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)