标准化矩阵 R 中的值

Jinku Hu 2023年1月30日 2021年7月14日
  1. 在 R 中使用 sweep 函数清除数组
  2. 使用 scale 函数对 R 矩阵中的值进行归一化
标准化矩阵 R 中的值

本文将介绍如何对 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
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相关文章 - R Matrix