Operazioni aritmetiche con le matrici
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 20 di 64.
L'aritmetica tra una matrice e un numero, o tra due matrici della stessa dimensione, opera elemento per elemento:
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)Output:
[,1] [,2]
[1,] 2 4
[2,] 6 8
[,1] [,2]
[1,] 11 22
[2,] 33 44Anche un confronto funziona cella per cella e restituisce una matrice logica. Usalo per contare le celle oppure come indice per modificare solo le celle corrispondenti:
m <- matrix(c(4, 12, 7, 15), nrow = 2, byrow = TRUE)
print(sum(m > 10))
m[m > 10] <- 10
print(m)Output:
[1] 2
[,1] [,2]
[1,] 4 10
[2,] 7 10t(m) scambia righe e colonne. %*% è il prodotto tra matrici, in cui ogni cella del risultato combina una riga della prima matrice con una colonna della seconda, quindi ncol(a) deve essere uguale a nrow(b):
a <- matrix(1:4, nrow = 2, byrow = TRUE)
print(t(a))
print(a %*% a)Output:
[,1] [,2]
[1,] 1 3
[2,] 2 4
[,1] [,2]
[1,] 7 10
[2,] 15 22L'aritmetica elemento per elemento tra matrici di dimensioni diverse si interrompe con l'errore non-conformable arrays, quindi confronta prima dim(). Il prodotto tra matrici ha una propria regola sulle dimensioni:
a <- matrix(1:4, nrow = 2)
b <- matrix(1:6, nrow = 2)
print(identical(dim(a), dim(b)))
print(dim(a %*% b))Output:
[1] FALSE
[1] 2 3Sfida
FacileCompleta cap_values(m, limit). Restituisci due righe: Over: con il numero di celle superiori a limit, poi Total: con la somma della matrice dopo che ogni valore superiore a limit è stato sostituito con limit.
Il codice fornito legge una matrice da una riga: le righe sono separate da ; e i valori di una riga da ,, quindi 1,2;3,4 è una matrice con le righe 1 2 e 3 4. La riga successiva contiene limit. Il codice stampa ogni riga restituita.
Provalo tu
cap_values <- function(m, limit) {
# Escribe tu código aquí
c("Over: 0", "Total: 0")
}
# Código de entrada/salida proporcionado: déjalo tal como está
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")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Sottostringhe con substr()Formattazione con sprintf()Dividere e unireRicerca nelle stringheSostituzione del testoRipasso - Generatore di nomi utente4Matrici
Creazione di matriciIndicizzazione delle matriciRiepiloghi di righe e colonneOperazioni aritmetiche con le matriciRipasso - Schema dei posti a sedere10Flusso di controllo avanzato
La funzione switch()ifelse() vettorialerepeat e breakFunzioni ricorsiveRiepilogo - Classificatore di voti2Ricerche chiave-valore
Ricerche in vettori con nomiControllare le chiaviAggiungere e rimuovere chiaviIterare sui nomiRiepilogo - Sportello titoli5Progetto - Registro dei voti
Aggiungere studentiRegistrare i voti8Ordinamento e raggruppamento
Ordinare i vettoriOrdinare in base a una chiaveRaggruppare con split()Riepiloghi dei gruppiRipasso - Classifica3Insiemi e conteggio
Valori univociOperazioni sugli insiemiTest di appartenenzaConteggio con table()Riepilogo - Ospiti dell’evento6Le funzioni come valori
Funzioni anonimePassare funzioniRestituire funzioniClosure con statoRiepilogo - Regole di sconto9DataFrame
Creare DataFrameColonne e righeFiltrare le righeAggiungere e ordinareRiepilogo - Report delle vendite12Progetto - Gestione delle spese
Registrare le speseSpesa totaleEsercitati da solo: Compilatore R online