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