標準化矩陣 R 中的值

Jinku Hu 2023年1月30日
  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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - R Matrix