用于矩阵乘法和加法的 R 函数
R function for Matrix Multiplication and Addition
在矩阵上执行 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。
你不能把你的矩阵算术封装在你自己的一个小函数中吗?
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)
}
在矩阵上执行 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。
你不能把你的矩阵算术封装在你自己的一个小函数中吗?
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)
}