Menu
Coddy logo textTech

Matrizenarithmetik

Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 20 von 64.

Arithmetik zwischen einer Matrix und einer Zahl oder zwischen zwei gleich großen Matrizen funktioniert zellenweise:

a <- matrix(1:4, nrow = 2, byrow = TRUE)
b <- matrix(c(10, 20, 30, 40), nrow = 2, byrow = TRUE)
print(a * 2)
print(a + b)

Ausgabe:

     [,1] [,2]
[1,]    2    4
[2,]    6    8
     [,1] [,2]
[1,]   11   22
[2,]   33   44

Ein Vergleich funktioniert ebenfalls Zelle für Zelle und gibt eine logische Matrix zurück. Verwende ihn, um Zellen zu zählen oder als Index, um nur die übereinstimmenden Zellen zu ändern:

m <- matrix(c(4, 12, 7, 15), nrow = 2, byrow = TRUE)
print(sum(m > 10))
m[m > 10] <- 10
print(m)

Ausgabe:

[1] 2
     [,1] [,2]
[1,]    4   10
[2,]    7   10

t(m) vertauscht Zeilen und Spalten. %*% ist das Matrixprodukt, bei dem jede Ergebniszelle eine Zeile der ersten Matrix mit einer Spalte der zweiten kombiniert, daher muss ncol(a) gleich nrow(b) sein:

a <- matrix(1:4, nrow = 2, byrow = TRUE)
print(t(a))
print(a %*% a)

Ausgabe:

     [,1] [,2]
[1,]    1    3
[2,]    2    4
     [,1] [,2]
[1,]    7   10
[2,]   15   22

Zellenweise Arithmetik zwischen Matrizen unterschiedlicher Größe bricht mit dem Fehler non-conformable arrays ab; vergleiche daher zuerst dim(). Für das Matrixprodukt gilt eine eigene Größenregel:

a <- matrix(1:4, nrow = 2)
b <- matrix(1:6, nrow = 2)
print(identical(dim(a), dim(b)))
print(dim(a %*% b))

Ausgabe:

[1] FALSE
[1] 2 3
challenge icon

Aufgabe

Einfach

Vervollständige cap_values(m, limit). Gib zwei Zeilen zurück: Over: mit der Anzahl der Zellen über limit, anschließend Total: mit der Summe der Matrix, nachdem jeder Wert über limit durch limit ersetzt wurde.

Der bereitgestellte Code liest eine Matrix aus einer Zeile ein: Die Zeilen werden durch ; und die Werte einer Zeile durch , getrennt, daher ist 1,2;3,4 eine Matrix mit den Zeilen 1 2 und 3 4. Die nächste Zeile enthält limit. Der Code gibt jede zurückgegebene Zeile aus.

Probier es selbst

cap_values <- function(m, limit) {
  # Schreibe deinen Code hier
  c("Over: 0", "Total: 0")
}

# Mitgelieferter Ein-/Ausgabecode: belasse ihn unverändert
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
  rows <- strsplit(line, ";")[[1]]
  matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(cap_values(parse_matrix(input[1]), as.numeric(input[2])), sep = "\n")
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik und Ablaufsteuerung

Übe selbstständig: Online-R-Compiler