我想计算矩阵x的每一行与其自身之间的乘积。然后总结所有这些产品的结果。结果是标量。我制作以下可用但不高效的尾声。有人可以帮我避免for循环吗?
for(i in 1:nrow(x){
resid2[i] <- t(x[i,])%*% x[i,]
}
V = sum(resid2)/
答案 0 :(得分:2)
解决方案只是矩阵中所有元素的平方和。
V = sum(x^2)
也可以通过矩阵乘法计算:
V = crossprod(as.vector(x))
中间向量resid2
可以计算为
resid2 = rowSums(x^2)
V = sum(resid2)
答案 1 :(得分:1)
以下是为apply
系列交换for循环的答案。
sum(apply(x, margin = 1, function(z) z%*%z))
apply
函数采用矩阵x
,margin = 1
表示每行(与margin = 2
相对,这意味着每列)。因此,对于x
中的每一行,运行一个将该行与自身相乘的函数:function(z) z%*%z
答案 2 :(得分:0)
如果我理解正确,你根本不需要循环。 mat %*% mat
应该这样做:
mat <- matrix(seq.int(9), nrow=3)
mat
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
mat %*% mat
## [,1] [,2] [,3]
## [1,] 30 66 102
## [2,] 36 81 126
## [3,] 42 96 150