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 44Ein 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 10t(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 22Zellenweise 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 3Aufgabe
EinfachVervollstä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")
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
1Strings im Detail
Teilstrings mit substr()Formatierung mit sprintf()Aufteilen und VerbindenStrings durchsuchenText ersetzenWiederholung – Benutzernamen-Generator4Matrizen
Matrizen erstellenMatrizen indizierenZusammenfassungen von Zeilen und SpaltenMatrizenarithmetikRückblick – Sitzplan10Fortgeschrittener Kontrollfluss
Die switch()-FunktionVektorisierter ifelse()repeat und breakRekursive FunktionenRückblick – Notenklassifizierung2Schlüssel-Wert-Suchen
Benannte Vektor-SuchenSchlüssel prüfenSchlüssel hinzufügen und entfernenNamen durchlaufenRückblick – Aktienübersicht5Projekt – Notenbuch
Schüler hinzufügenNoten eintragen3Mengen und Zählen
Eindeutige WerteMengenoperationenZugehörigkeitstestsZählen mit table()Rückblick – Gäste einer Veranstaltung6Funktionen als Werte
Anonyme FunktionenFunktionen übergebenFunktionen zurückgebenClosures mit ZustandRückblick – Rabattregeln9Datenrahmen
Datenrahmen erstellenSpalten und ZeilenZeilen filternHinzufügen und SortierenZusammenfassung – Verkaufsbericht12Projekt – Ausgaben-Tracker
Ausgaben erfassenGesamtausgabenÜbe selbstständig: Online-R-Compiler