Arithmétique matricielle
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 20 sur 64.
Les opérations arithmétiques entre une matrice et un nombre, ou entre deux matrices de même taille, s’effectuent cellule par cellule :
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)Sortie :
[,1] [,2]
[1,] 2 4
[2,] 6 8
[,1] [,2]
[1,] 11 22
[2,] 33 44Une comparaison fonctionne également cellule par cellule et renvoie une matrice logique. Utilisez-la pour compter les cellules ou comme index afin de modifier uniquement les cellules correspondantes :
m <- matrix(c(4, 12, 7, 15), nrow = 2, byrow = TRUE)
print(sum(m > 10))
m[m > 10] <- 10
print(m)Résultat :
[1] 2
[,1] [,2]
[1,] 4 10
[2,] 7 10t(m) échange les lignes et les colonnes. %*% est le produit matriciel, où chaque cellule du résultat combine une ligne de la première matrice avec une colonne de la seconde, donc ncol(a) doit être égal à nrow(b) :
a <- matrix(1:4, nrow = 2, byrow = TRUE)
print(t(a))
print(a %*% a)Résultat :
[,1] [,2]
[1,] 1 3
[2,] 2 4
[,1] [,2]
[1,] 7 10
[2,] 15 22L’arithmétique cellule par cellule entre des matrices de tailles différentes s’arrête avec l’erreur non-conformable arrays ; comparez donc d’abord dim(). Le produit matriciel obéit à sa propre règle de dimension :
a <- matrix(1:4, nrow = 2)
b <- matrix(1:6, nrow = 2)
print(identical(dim(a), dim(b)))
print(dim(a %*% b))Sortie :
[1] FALSE
[1] 2 3Défi
FacileComplétez cap_values(m, limit). Retournez deux lignes : Over: avec le nombre de cellules supérieures à limit, puis Total: avec la somme de la matrice après que chaque valeur supérieure à limit a été remplacée par limit.
Le code fourni lit une matrice sur une ligne : les lignes sont séparées par ; et les valeurs d’une ligne par ,, ainsi 1,2;3,4 est une matrice dont les lignes sont 1 2 et 3 4. La ligne suivante contient limit. Le code affiche chaque ligne retournée.
Essayez vous-même
cap_values <- function(m, limit) {
# Écrivez votre code ici
c("Over: 0", "Total: 0")
}
# Code d'entrée/sortie fourni : gardez-le tel quel
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")
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et flux d’exécution
1Les chaînes en profondeur
Sous-chaînes avec substr()Mise en forme avec sprintf()Scinder et joindreRechercher dans les chaînesRemplacer du texteRécapitulatif - Créateur de nom d'utilisateur4Matrices
Créer des matricesIndexer des matricesRécapitulatifs des lignes et des colonnesArithmétique matricielleRécapitulatif - Plan de salle7La famille Apply
lapply et sapplyMap et mapplyFilter et FindReduceRécapitulatif - Pipeline de données10Structures de contrôle avancées
La fonction switch()ifelse() vectorisérepeat et breakFonctions récursivesRécapitulatif – Classificateur de notes2Recherches par clé-valeur
Recherches dans des vecteurs nommésVérifier les clésAjouter et supprimer des clésParcourir les nomsRécapitulatif - Bureau des stocks5Projet - Carnet de notes
Ajouter des élèvesEnregistrer les notes3Ensembles et comptage
Valeurs uniquesOpérations sur les ensemblesTests d’appartenanceCompter avec table()Récapitulatif - Invités à l’événement6Les fonctions comme valeurs
Fonctions anonymesPasser des fonctionsRetourner des fonctionsFermetures avec étatRécapitulatif - Règles de remise9Data Frames
Créer des Data FramesColonnes et lignesFiltrer les lignesAjouter et trierRécapitulatif - Rapport des ventes12Projet - Suivi des dépenses
Enregistrer les dépensesDépenses totalesEntraînez-vous par vous-même : Compilateur R en ligne