标准化矩阵 R 中的值
Jinku Hu
2023年1月30日
本文将介绍如何对 R 矩阵中的值进行归一化。
在 R 中使用 sweep
函数清除数组
sweep
函数用于从数组中清除汇总统计量。它将输入数组作为第一个参数,将汇总统计作为第三个参数。该函数的第二个参数表示需要与第三个参数向量的元素对应的索引向量。第四个参数表示用于清除数组的函数。在这种情况下,我们传递除法运算符,它可以提供带引号的符号 - "/"
。该函数返回与输入数组具有相同形状的数组。我们利用 colSums
函数计算给定输入数组的列总和,并将结果作为汇总统计量传递。
require(stats)
v1 <- c(1.1, 1.2, 4.3, 1.3, 3.9, 2.1, 5.3, 3.8, 7.7, 8.8, 6.7, 2.6)
m1 <- matrix(v1, ncol = 4)
sweep(m1, 2, colSums(m1), FUN = "/")
输出:
[,1] [,2] [,3] [,4]
[1,] 0.1666667 0.1780822 0.3154762 0.4861878
[2,] 0.1818182 0.5342466 0.2261905 0.3701657
[3,] 0.6515152 0.2876712 0.4583333 0.1436464
需要注意的是,sweep
函数也可以使用函数参数的默认值。如果用户未明确提供,则假定该函数是减法运算符。请注意,当传递自定义函数对象时,它应该有两个参数。以下代码片段从矩阵相应列中的元素中减去每列的中值。
require(stats)
v1 <- c(1.1, 1.2, 4.3, 1.3, 3.9, 2.1, 5.3, 3.8, 7.7, 8.8, 6.7, 2.6)
m1 <- matrix(v1, ncol = 4)
med.att <- apply(m1, 2, median)
sweep(m1, 2, med.att)
输出:
[,1] [,2] [,3] [,4]
[1,] -0.1 -0.8 0.0 2.1
[2,] 0.0 1.8 -1.5 0.0
[3,] 3.1 0.0 2.4 -4.1
使用 scale
函数对 R 矩阵中的值进行归一化
矩阵数据归一化的另一个有用函数是 scale
,它将输入矩阵的每一列除以来自名为 - scale
的第三个参数的相应值。请注意,scale
采用用于列居中的 center
参数(更多详细信息可以在此 page 上找到)。在这种情况下,我们将 FALSE
分配给后一个参数,表示不需要进行列居中。colSums
函数用于计算输入矩阵每一列的总和,并将其作为 scale
参数传递。
require(stats)
v1 <- c(1.1, 1.2, 4.3, 1.3, 3.9, 2.1, 5.3, 3.8, 7.7, 8.8, 6.7, 2.6)
m1 <- matrix(v1, ncol = 4)
c1 <- colSums(m1)
scale(m1, center = FALSE, scale = c1)
输出:
[,1] [,2] [,3] [,4]
[1,] 0.1666667 0.1780822 0.3154762 0.4861878
[2,] 0.1818182 0.5342466 0.2261905 0.3701657
[3,] 0.6515152 0.2876712 0.4583333 0.1436464
attr(,"scaled:scale")
[1] 6.6 7.3 16.8 18.1
作者: Jinku Hu