Menu
Coddy logo textTech

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   44

Une 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   10

t(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   22

L’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 3
challenge icon

Défi

Facile

Complé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")
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur R en ligne