Pagina personale di:
Carlo Vecchio
appunti di C#, R, SQL Server, ASP.NET, algoritmi, numeri
Vai ai contenuti

R - Le matrici

R

Le matrici

Creazione di matrici

  • La creazione di matrici avviene con la funzione matrix().
  • Il riempimento dei dati avviene di default, per colonna. Con l'attributo byrow = TRUE si ottiene il riempimento per riga.
  • Se i dati non bastano, vengono ripetuti, purché siano di una quantità sottomultipla del numero di elementi della matrice.

# Creazione di una matrice con 4 righe e 3 colonne.
x <- matrix(1:12, nrow = 4, ncol = 3)
print(x)
    [,1] [,2] [,3]
[1,]   1    5    9
[2,]   2    6   10
[3,]   3    7   11
[4,]   4    8   12
# Se i dati non bastano vengono ripetuti.
x <- matrix(1:3, nrow = 4, ncol = 3)
print(x)
    [,1] [,2] [,3]
[1,]   1    2    3
[2,]   2    3    1
[3,]   3    1    2
[4,]   1    2    3
# Riempimento dei dati per riga.
x <- matrix(1:12, nrow = 4, ncol = 3, byrow = TRUE)
print(x)
    [,1] [,2] [,3]
[1,]   1    2    3
[2,]   4    5    6
[3,]   7    8    9
[4,]  10   11   12

  • Le matrici possono essere create anche partendo da N vettori e unendoli per colonna con la funzione cbind() o unendoli per riga funzione rbind().

# Creazione di una matrice partendo dalle colonne.
c1 <- c(1, 2, 3)
c2 <- c(4, 5, 6)
c3 <- c(7, 8, 9)
m <- cbind(c1, c2, c3)
print(m)
    c1 c2 c3
[1,]  1  4  7
[2,]  2  5  8
[3,]  3  6  9
# Creazione di una matrice partendo dalle righe.
r1 <- c(1, 2, 3)
r2 <- c(4, 5, 6)
r3 <- c(7, 8, 9)
m <- rbind(r1, r2, r3)
print(m)
  [,1] [,2] [,3]
r1    1    2    3
r2    4    5    6
r3    7    8    9

Selezione di elementi da una matrice
  • Data una matrice si possono selezionare elementi singoli, range di righe e colonne, intere righe e intere colonne.

# Creazione di una matrice con 4 righe e 3 colonne.
x <- matrix(1:12, nrow = 4, ncol = 3)
print(x)
   [,1] [,2] [,3]
[1,]   1    5    9
[2,]   2    6   10
[3,]   3    7   11
[4,]   4    8   12
# Selezione di un elemento della matrice.
x[2,3]
[1] 10
# Selezione di un range di righe e di un range di colonne.
x[1:2, 2:3]
   [,1] [,2]
[1,]   5    9
[2,]   6   10
# Selezione di una riga.
x[2,]
[1]  2  6 10
# Selezione di una colonna.
x[,2]
[1] 5 6 7 8

Operazioni su una matrice
  • Come per i vettori, tutti gli elementi di una matrice possono essere sommati, sottratti, moltiplicati, eccetera, per un valore.
  • Esempio:

# Creazione di una matrice con 4 righe e 3 colonne.
x <- matrix(1:12, nrow = 4, ncol = 3)
print(x)
    [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12
print(x * 2)
    [,1] [,2] [,3]
[1,]    2   10   18
[2,]    4   12   20
[3,]    6   14   22
[4,]    8   16   24

  • Data una matrice, per scambiare le righe con le colonne, occorre fare una operazione che si chiama trasposizione.
  • In R per creare la matrice trasporta si utilizza la funzione t().

# Creazione di una matrice con 4 righe e 3 colonne.
x <- matrix(1:12, nrow = 4, ncol = 3)
print(x)
   [,1] [,2] [,3]
[1,]   1    5    9
[2,]   2    6   10
[3,]   3    7   11
[4,]   4    8   12
y <- t(x)
print(y)
    [,1] [,2] [,3] [,4]
[1,]   1    2    3    4
[2,]   5    6    7    8
[3,]   9   10   11   12

  • Per calcolare la somma di tutte le righe o di tutte le colonne, utilizzare le funzioni rowSums() e colSums().
  • In modo analogo si possono calcolare le funzioni statistiche di righe o colonne specifiche.

# Creazione di una matrice con 4 righe e 3 colonne.
x <- matrix(1:12, nrow = 4, ncol = 3)
print(x)
    [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12
# Totale per riga.
print(rowSums(x))
[1] 15 18 21 24
# Totale per colonna.
print(colSums(x))
[1] 10 26 42
# Media della prima riga.
print(mean(x[1,]))
[1] 5
# Media della prima colonna.
print(mean(x[,1]))
[1] 2.5

Operazioni su due matrici
  • Le operazioni comuni (addizione, sottrazione, ecc.) tra due matrici sono consentite purché le matrici abbiano lo stesso numero di righe e di colonne.
  • Le operazioni si intendono elemento per elemento.

# Creazione di due matrici con 2 righe e 2 colonne.
x <- matrix(1:4, nrow = 2, ncol = 2)
y <- matrix(5:8, nrow = 2, ncol = 2)
print(x)
   [,1] [,2]
[1,]   1    3
[2,]   2    4
print(y)
    [,1] [,2]
[1,]    5    7
[2,]    6    8
# Moltiplica per 2 tutti gli elementi della matrice x.
print(2 * x)
    [,1] [,2]
[1,]    2    6
[2,]    4    8
# Somma i rispettivi elementi delle matrici x e y.
print(x + y)
    [,1] [,2]
[1,]    6   10
[2,]    8   12

Assegnazione di nomi alla matrice
  • Una volta creato una matrice, in molti casi è utile dare un nome alle colonne o alle righe di essa.
  • Lo si può fare utilizzando le funzioni colnames() e rownames().

# Creazione di una matrice con 3 righe e 3 colonne.
x <- matrix(1:9, nrow = 3, ncol = 3)
print(x)
    [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
colnames(x) = c("Col 1", "Col 2", "Col 3")
rownames(x) = c("Row 1", "Row 2", "Row 3")
print(x)
    Col 1 Col 2 Col 3
Row 1    1     4     7
Row 2    2     5     8
Row 3    3     6     9

Prodotto tra due matrici
  • Due matrici possono essere moltiplicate tra loro in senso geometrico.
  • Il risultato è una matrice il cui numero di righe è uguale al numero di righe della prima matrice e il cui numero di colonne è uguale al numero di colonne della seconda matrice.
  • Condizione necessaria affinché le due matrici siano moltiplicabili è che il numero di colonne della prima matrice sia uguale al numero di righe della seconda matrice.

# Prodotto matriciale tra le due matrici x e y.
x <- matrix(1:6,2,3)
y <- matrix(1:6,3,2)
print(x)
    [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
print(y)
    [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
print(x%*%y)
    [,1] [,2]
[1,]   22   49
[2,]   28   64

Cenni sugli array
  • Gli array sono matrici a più di due dimensioni.
  • La creazione di un array avviene con la funzione array().
  • Analogamente alla funzione matrix(), nel primo argomento vanno messi gli oggetti da inserire nell'array, nel secondo argomento va messa una lista con la lunghezza delle dimensioni.

# Array a 3 dimensioni, la prima dimensione ha lunghezza 2, la seconda dimensione ha lunghezza 3, la terza dimensione ha lunghezza 4.
array1 <- array(1:24, c(2,3,4))
print(array1)

, , 1

    [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

    [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

, , 3

    [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

    [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

© 2022 Carlo Vecchio
Torna ai contenuti