標準化矩陣 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