Maintenant que nous avons couvert les bases de la création d'une matrice, nous examinerons certaines opérations communes effectuées avec des matrices. Il s'agit notamment d'effectuer des opérations d'algèbre linéaire, l'indexation matricielle et le filtrage matriciel.
1 Effectuer des opérations d'algèbre linéaire sur des matrices
Vous pouvez effectuer diverses opérations d'algèbre linéaire sur des matrices, telles que la multiplication matricielle, la multiplication scalaire matricielle et l'addition de matrice. En utilisant y de l'exemple précédent, voici comment effectuer ces trois opérations:
[code start:1lang:rsplus]y %*% y # multiplication matricielle mathématique
[,1] [,2]
[1,] 7 15
[2,]10 22[/code]
[code start:1lang:rsplus]> 3*y # multiplication mathématique de matrice par un scalaire
[,1] [,2]
[1,] 3 9
[2,] 6 12[/code]
[code start:1lang:rsplus]> y+y # addition matricielle mathématique
[,1] [,2]
[1,] 2 6
[2,] 4 8[/code]
Pour en savoir plus sur les opérations d'algèbre linéaire sur les matrices, voir la section 8.4.
2 Indice de matrice
Les mêmes opérations que nous avons discutées pour les vecteurs à la section s'appliquent également aux matrices. Voici un exemple:
Ici, nous avons demandé la sous-matrice de z consistant en tous les éléments avec les numéros de colonne 2 et 3 et n'importe quel numéro de ligne. Cela extrait les deuxième et troisième colonnes.
Voici un exemple d'extraction de lignes au lieu de colonnes:
Vous pouvez également attribuer des valeurs aux sous-représentations:
Ici, nous avons attribué de nouvelles valeurs à la première et à la troisième rangées de y. Et voici un autre exemple d'affectation aux sous-représentations:
Les indices négatifs, utilisés avec les vecteurs pour exclure certains éléments, fonctionnent de la même manière avec les matrices:
Dans la deuxième commande, nous avons demandé toutes les rangées de y sauf la seconde.
4 Filtrage sur les matrices
Le filtrage peut se faire avec des matrices, tout comme avec les vecteurs. Il faut cependant faire attention à la syntaxe. Commençons par un exemple simple:
Encore une fois, dissimulons ceci, tout comme nous l'avons fait lorsque nous avons examiné le chapitre 2:
Ici, nous regardons le vecteur x [, 2], qui est la deuxième colonne de x, et déterminons lequel de ses éléments est supérieur ou égal à 3. Le résultat, attribué à j, est un vecteur booléen.
Maintenant, utilisez j en x:
Ici, nous calculons x [j], c'est-à-dire les rangées de x spécifiées par les éléments réels de j-obtenant les lignes correspondant aux éléments de la colonne 2 qui étaient au moins égales à 3. Par conséquent, le comportement montré plus tôt lorsque cet exemple a été introduit:
À des fins de performance, il convient de noter à nouveau que le calcul de j ici est une opération complètement vectorisée, car tous les éléments suivants sont vrais:
• L'objet x [, 2] est un vecteur.
• L'opérateur> = compare deux vecteurs.
• Le numéro 3 a été recyclé sur un vecteur de 3 s.
Notez également que même si j a été défini en termes de x, puis a été utilisé pour extraire de x, il n'était pas nécessaire d'être ainsi. Le critère de filtrage peut être basé sur une variable séparée de celle à laquelle le filtrage sera appliqué. Voici un exemple avec le même x comme ci-dessus:
Ici, l'expression z %% 2 == 1 teste chaque élément de z pour être un nombre impair, ce qui donne (TRUE, FALSE, TRUE). En conséquence, nous avons extrait les première et troisième rangées de x.
Voici un autre exemple:
Nous utilisons le même principe ici, mais avec un ensemble de conditions un peu plus complexe pour l'extraction des lignes. (L'extraction de colonne, ou plus généralement, l'extraction de toute sous-matrice est similaire). Tout d'abord, l'expression m [, l]> 1 compare chaque élément de la première colonne de m à 1 et retourne (FALSE, VRAI, VRAI) . La deuxième expression, m [, 2]> 5, revient de manière similaire (FALSE, FALSE, TRUE). Nous prenons ensuite le ET logique de (FALSE, VRAI, VRAI) et (FALSE, FALSE, VRAI), rendement (FALSE, FAUX, VRAI). En utilisant ce dernier dans les indices de ligne de m, on obtient la troisième rangée de m.
Notez que nous devions utiliser &, le vecteur Boolean AND operator, plutôt que le scalaire que nous utiliserions dans une déclaration if, &&. Une liste complète de ces opérateurs figure à la section 7.2.
Le lecteur d'alerte a peut-être remarqué une anomalie dans l'exemple précédent. Notre filtrage aurait dû nous donner une sous-matrice de taille 1 par 2, mais elle nous a donné un vecteur à deux éléments. Les éléments étaient corrects, mais le type de données n'était pas. Cela causerait des problèmes si nous devions l'introduire dans une autre fonction matricielle. La solution consiste à utiliser l'argument drop, qui indique à R de conserver la nature bidimensionnelle de nos données. Nous allons discuter de la baisse de détail dans la section 3.6 lorsque nous examinerons la réduction de dimension involontaire.
Puisque les matrices sont des vecteurs, vous pouvez également vous appliquer des opérations vectorielles. Voici un exemple:
R nous a informé ici que, du point de vue de l'indexation vectorielle, des éléments
1, 3, 5 et 6 de m sont supérieurs à 2. Par exemple, l'élément 5 est l'élément de la rangée 2, colonne 2 de m, que l'on voit avoir la valeur 10, qui est en effet supérieure à 2.