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