Matrixrekening: Matrices in R
Basiseigenschappen en creatie van matrices
Matrices zijn in R 2-dimensionale arrays. Je kunt denken aan een opbouw van rijvectoren van gelijke lengte die onder elkaar gezet worden. Je kunt de afmeting van een matrix specificeren met de dim
functie.
> A <- 1:6 # 1-dimensionale array met 6 elementen
> dim(A) <- c(2,3) # converteer naar 2-dimensionale array met 2 rijen en 2 kolommmen
> A; # toon als 2x3 matrix
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> B <- matrix( 1:6, ncol=2, by) # alternatieve definitie van een matrix
> B
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> dim(B) # B is een 3x2 kolomsgewijs opgevulde matrix
[1] 3 2
dimension =
2 3
> C <- matrix( 1:6, ncol=2, byrow=TRUE); # C is een 3x2 rijgewijs opgevulde matrix
> C
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
Andere veelgebruikte methoden om arrays te maken illustreren we aan de hand van voorbeelden.
Constructie van een matrix via herhalingslussen
> A <- matrix(0, nrow=3, ncol=4); A # 3x4 nulmatrix [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 0 0 0 0 > for (i in 1:3) { for (j in 1:4) { A[i,j] <- i^j # definitie van een matrixelement } }
> A [,1] [,2] [,3] [,4] [1,] 1 1 1 1 [2,] 2 4 8 16 [3,] 3 9 27 81
Constructie van een matrix via een indexeringsfunctie
> A <- outer(1:3, 1:4, FUN=function(i,j){i^j}); A
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 4 8 16
[3,] 3 9 27 81
Constructie van een speciale matrix Er bestaan ook speciale functies om matrices en vectoren met enen en nullen te creëren en om diagonaalmatrices te maken, namelijkdiag
:
> Z <- matrix(0, 2, 4); Z # 2x4 nulmatrix
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
> I <- diag(3); I # 3x3 identiteitsmatrix
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
> J <- matrix(1, 3, 3); J # 3x3 matrix met alle elements gelijk aan 1
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
> D <- diag(1:3); D # diagonaalmatrix
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 2 0
[3,] 0 0 3
Constructie van een matrix door stapeling Arrays kunnen ook horizontaal en verticaal gestapeld worden:
> A [,1] [,2] [,3] [,4] [1,] 1 1 1 1 [2,] 2 4 8 16 [3,] 3 9 27 81 > I [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > AI <- cbind(A,I); AI # horizontale stapeling van matrices [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 1 1 1 1 0 0 [2,] 2 4 8 16 0 1 0 [3,] 3 9 27 81 0 0 1 > ZAZ <- rbind(Z,A,Z); ZAZ # verticale stapeling van matrices [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 1 1 1 1 [4,] 2 4 8 16 [5,] 3 9 27 81 [6,] 0 0 0 0 [7,] 0 0 0 0
Constructie van een willekeurige matrix Je kunt ook willekeurig gegenereerde matrices creëren.
> # random 3x2 matrix met getallen tussen 0 en 1
> matrix(runif(6), nrow=3)
[,1] [,2]
[1,] 0.4605161 0.03090664
[2,] 0.9818785 0.82348871
[3,] 0.4128821 0.65200366
> # random 2x2 matrix via de standaardnormale verdeling
> matrix(rnorm(4), nrow=2)
[,1] [,2]
[1,] -0.3502606 0.8576934
[2,] -1.6379942 0.9516872
> # random 2x3 matrix met gehele getallen in segment [5, 8]
> matrix(sample(5:8, 6, replace=TRUE), nrow=2)
[,1] [,2] [,3]
[1,] 8 5 7
[2,] 7 6 5