R语言 将缩放后的矩阵转换为其原始形式–使用矩阵计算
在R编程中,可以使用scale()函数对矩阵进行缩放和居中处理。但是,没有内置的函数可以将缩放后的矩阵转换回原始矩阵。在这篇文章中,我们将学习如何使用一些简单的计算将缩放后的矩阵转换为原始矩阵。
使用矩阵属性
缩放后的矩阵的属性可以用来将矩阵解压缩成原始矩阵。
# Create matrix
mt <- matrix(c(1:20), ncol = 5)
# Print original matrix
cat("Original matrix:\n")
print(mt)
# Scale the matrix
scaled.mt <- scale(mt)
# Print Scaled matrix
cat("Scaled matrix:\n")
print(scaled.mt)
# Unscale the matrix
unscaled.mt <- t(apply(scaled.mt, 1,
function(r) r * attr(scaled.mt, 'scaled:scale') +
attr(scaled.mt, 'scaled:center')))
# Print Unscaled matrix
cat("Unscaled matrix:\n")
print(unscaled.mt)
R
输出。
Original matrix:
[, 1] [, 2] [, 3] [, 4] [, 5]
[1, ] 1 5 9 13 17
[2, ] 2 6 10 14 18
[3, ] 3 7 11 15 19
[4, ] 4 8 12 16 20
Scaled matrix:
[, 1] [, 2] [, 3] [, 4] [, 5]
[1, ] -1.1618950 -1.1618950 -1.1618950 -1.1618950 -1.1618950
[2, ] -0.3872983 -0.3872983 -0.3872983 -0.3872983 -0.3872983
[3, ] 0.3872983 0.3872983 0.3872983 0.3872983 0.3872983
[4, ] 1.1618950 1.1618950 1.1618950 1.1618950 1.1618950
attr(, "scaled:center")
[1] 2.5 6.5 10.5 14.5 18.5
attr(, "scaled:scale")
[1] 1.290994 1.290994 1.290994 1.290994 1.290994
Unscaled matrix:
[, 1] [, 2] [, 3] [, 4] [, 5]
[1, ] 1 5 9 13 17
[2, ] 2 6 10 14 18
[3, ] 3 7 11 15 19
[4, ] 4 8 12 16 20
R
使用平均数和标准差
在这个例子中,我们将使用原矩阵的平均数和标准差对已缩放的矩阵进行解标。
# Create matrix
a <- rnorm(5, 5, 2)
b <- rnorm(5, 7, 5)
mt <- cbind(a, b)
# get center and scaling values
m <- apply(df, 2, mean)
s <- apply(df, 2, sd)
# Print original matrix
cat("Original matrix:\n")
print(mt)
# Scale the matrix
scaled.mt <- scale(mt, center = m, scale = s)
# Print Scaled matrix
cat("Scaled matrix:\n")
print(scaled.mt)
# Unscale the matrix
unscaled.mt <- t((t(scaled.mt) * s) + m)
# Print Unscaled matrix
cat("Unscaled matrix:\n")
print(unscaled.mt)
R
输出
Original matrix:
a b
[1, ] 5.552301 1.9865159
[2, ] 3.936486 17.5327829
[3, ] 5.379720 15.0981877
[4, ] 3.546333 0.5230305
[5, ] 5.043194 2.0930855
Scaled matrix:
a b
[1, ] 0.01543556 -2.062174
[2, ] -0.69057233 5.252016
[3, ] -0.05997146 4.106591
[4, ] -0.86104456 -2.750713
[5, ] -0.20701146 -2.012036
attr(, "scaled:center")
a b
5.516974 6.369655
attr(, "scaled:scale")
a b
2.288663 2.125494
Unscaled matrix:
a b
[1, ] 5.552301 1.9865159
[2, ] 3.936486 17.5327829
[3, ] 5.379720 15.0981877
[4, ] 3.546333 0.5230305
[5, ] 5.043194 2.0930855
attr(, "scaled:center")
a b
5.516974 6.369655
attr(, "scaled:scale")
a b
2.288663 2.125494
R