Normalisieren Sie die Werte in der Matrix R

Jinku Hu 14 Juli 2021
  1. Verwendung von die Funktion sweep zum Sweepen von Arrays in R
  2. Verwenden Sie die Funktion scale, um die Werte in der R-Matrix zu normalisieren
Normalisieren Sie die Werte in der Matrix R

In diesem Artikel wird vorgestellt, wie die Werte in einer R-Matrix normalisiert werden.

Verwendung von die Funktion sweep zum Sweepen von Arrays in R

Die Funktion sweep wird verwendet, um die zusammenfassende Statistik aus dem Array auszulesen. Es verwendet das Eingabearray als erstes Argument und die Zusammenfassungsstatistik als drittes Argument. Das zweite Argument der Funktion stellt den Vektor der Indizes dar, die den Elementen des dritten Argumentvektors entsprechen müssen. Das vierte Argument bezeichnet die Funktion, die verwendet wird, um das Array auszuräumen. In diesem Fall übergeben wir den Divisionsoperator, der mit Anführungszeichen versehen werden kann - "/". Die Funktion gibt das Array mit derselben Form wie das Eingabearray zurück. Wir verwenden die Funktion colSums, um die Spaltensummen des angegebenen Eingabearrays zu berechnen und das Ergebnis als zusammenfassende Statistik zu übergeben.

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 = "/")

Ausgabe:

          [,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

Beachten Sie, dass die Funktion sweep auch mit dem Standardwert des Funktionsparameters möglich ist. Wenn der Benutzer sie nicht explizit angibt, wird angenommen, dass die Funktion der Subtraktionsoperator ist. Beachten Sie, dass bei der Übergabe des benutzerdefinierten Funktionsobjekts zwei Argumente vorhanden sein sollten. Der folgende Codeausschnitt subtrahiert den Median jeder Spalte von den Elementen in der entsprechenden Spalte der Matrix.

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)

Ausgabe:

     [,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

Verwenden Sie die Funktion scale, um die Werte in der R-Matrix zu normalisieren

Eine weitere nützliche Funktion für die Normalisierung von Matrixdaten ist scale, die jede Spalte der Eingabematrix durch den entsprechenden Wert aus dem dritten Argument namens scale dividiert. Beachten Sie, dass scale das Argument center verwendet, das für die Spaltenzentrierung verwendet wird (weitere Details finden Sie auf dieser Seite). In diesem Fall weisen wir dem letzteren Argument FALSE zu, was darauf hinweist, dass die Spaltenzentrierung nicht durchgeführt werden muss. Mit der Funktion colSums werden die Summen für jede Spalte der Eingabematrix berechnet und als scale-Argument übergeben.

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)

Ausgabe:

          [,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
Autor: 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 Facebook

Verwandter Artikel - R Matrix