用于矩阵乘法和加法的R函数

时间:2015-05-27 14:43:26

标签: r svd matrix-decomposition function

在矩阵上执行SVD后,我想创建一个函数(我对R中的函数不好),它根据我指定的n值创建一个简化矩阵。

例如,这是我现在拥有的R代码。

scores = c(3,1,1,-1,3,1)
Mat = matrix(scores, nrow=2)
svd = svd(Mat)

现在,通过蛮力和无知,从矩阵分解到原始矩阵,以下工作。

score1 = svd$u[,1] %*% t(svd$v[,1]) * svd$d[1]
    score2 = svd$u[,2] %*% t(svd$v[,2]) * svd$d[2]

z = score1 + score2
z

    [,1] [,2] [,3]
[1,]    3    1    3
[2,]    1   -1    1

展望未来,我希望能够在大型矩阵上执行此操作,并希望能够指定因子的数量。所以,我不想将得分1:n相加,而是想要一个函数来为我做这个。

1 个答案:

答案 0 :(得分:2)

难道你不能将矩阵运算包装在你自己的小函数中吗?

recover_matrix_from_svd <- function(svd) {
    score <- 0
    for(i in 1:ncol(svd$u)) {
    score <- score + svd$u[,i] %*% t(svd$v[,i]) * svd$d[i]
    }
    score
}

或者,diag函数对此非常有用。使用它可以得到更清晰的计算:

recover_matrix_from_svd <- function(svd) {
    svd$u %*% diag(svd$d) %*% t(svd$v)
}