Matrixregning i R

Jeg introducerede for nyligt til hvordan du kan lave vektorregning i R. I denne artikel vil jeg introducere til hvordan du kan regne med matricer i R.
En matrix er en flerdimensionel vektor – eller med andre ord er en vektor en 1-dimensionel matrix. Ved matricer tales der klassisk først om dem, når der er mindst 2 dimensioner. I R er en matrix et gitter af værdier af samme datatyper, hvilket kunne være tal, i to dimensioner.
For at lave en matrix i R, bruger du funktionen matrix. Argumenterne til funktionen er en vektor, antallet af rækker i matricen, antallet af kolonner i matricen og at man vil fylde matricen op efter række. Lad os lige tage et eksempel.

A<-matrix(c(2, 4, 3, 1, 5, 7), nrow=2, ncol=3, byrow = TRUE)

Hvis du returnerer værdien for A (skriv A og enter) får du følgende resultat:

2 4 3
1 5 7

Altså netop en 3×2 matrix og bemærk at den fylder først én række helt op, før den fortsætter til næste række. Hvis jeg vil have vist det element der står på 2. række og 3. kolonne, skal jeg skrive:

A[2,3]

Hvilket ville give svaret 7. Jeg kunne også få vist hele række 2 med koden:

A[2,]

Eller hele 2. kolonne med koden:

A[,2]

Hvis jeg ville have den 1. og den 3. kolonne skulle jeg skrive:

A[,c(1,3)]

Transpose af en matrix

Du kan skabe en ny matrix, der er en transposering af den første matrix, dvs. der er byttet om på rækker og kolonner. Dette gør du med funktionen c.

A<-matrix(c(2, 4, 3, 1, 5, 7), nrow=2, ncol=3, byrow = TRUE)
B<-t(A)

Hvilket ville give følgende resultat for B:

2 1
4 5
3 7

Kombiner matricer

Du kan også kombinere matricer der har henholdsvis det samme antal rækker eller det samme antal kolonner. Hvis du for eksempel har to matricer med samme antal rækker, kan du kombinere dem med cbind.

A<-matrix(c(2, 4, 3, 1, 5, 7), nrow=2, ncol=3, byrow = TRUE)
B<-matrix(c(7,8), nrow=2, ncol=1, byrow=TRUE)
C<-cbind(A,B)
C[]

Dette ville returnere

2 4 3 7
1 5 7 8

På samme måde kunne jeg kombinere to matricer med samme antal kolonner med funktionen rbind.

A<-matrix(c(2, 4, 3, 1, 5, 7), nrow=2, ncol=3, byrow = TRUE)
B<-matrix(c(7,8,5), nrow=1, ncol=3, byrow=TRUE)
C<-rbind(A,B)
C[]

Hvilket ville give følgende resultat:

2 4 3
1 5 7
7 8 5

Lav en matrix om til en vektor

Når vi skulle oprette en matrix, var en af argumenterne faktisk en vektor, og med andre argumenter fortalte vi hvordan værdierne i vektoren skulle fordeles i matricen. Du kan også i R lave en matrix om til en vektor med funktionen c.

A<-matrix(c(2, 4, 3, 1, 5, 7), nrow=2, ncol=3, byrow = TRUE)
b<-c(A)
b[]

Hvilket ville returnere:

2 1 4 5 3 7

Bemærk her at da vi skabte matricen, sagde vi med byrow=TRUE at den skulle fylde rækkerne helt op, før den fortsatte til næste række. Når du bruger c funktionen til at lave en matrix om til en vektor, tager den koordinaterne én kolonne ad gangen, dvs. omvendt. Dette kan måske nemmest ses, ved at anvende byrow=FALSE i stedet når du skaber matricen.

A<-matrix(c(2, 4, 3, 1, 5, 7), nrow=2, ncol=3, byrow = FALSE)
b<-c(A)
b[]

Hvilket netop giver:

2 4 3 1 5 7

Determinanten

Hvis du har en kvadratisk matrix, kan du beregne determinanten med funktionen det.

A<-matrix(c(2, 4, 1, 5), nrow=2, ncol=2, byrow = TRUE)
det(A)

Hvilket ville give resultatet 6.

Det ydre produkt

Ved vektorer så du hvordan du kunne beregne prikproduktet, dvs. det indre produkt, ved at bruge %*%. Hvis du for eksempel har en vektor af længden 6, der svarer til udfaldet på en terning, og vil have prikproduktet af sig selv skriver du:

a<-c(1,2,3,4,5,6)
a%*%a

Hvilket ville give 91, der netop er prikproduktet af vektor a med sig selv. I R kan du også beregne det ydre produkt af en vektor, ved at anvende %o% i stedet.

a<-c(1,2,3,4,5,6)
a%o%a

Resultatet bliver en matrix med størrelsen 6×6.

1 2  3  4  5  6
2 4  6  8  10 12
3 6  9  12 15 18
4 8  12 16 20 24
5 10 15 20 25 30
6 12 18 24 30 36

Det var lidt introduktion til hvordan du regner med matricer i R. Se også hvordan du regner med vektorer og min begynderguide til R.

0 0 votes
Article Rating

Andreas Andersen

Forfatter og grundlægger af IT-blogger.dk, der har blogget om IT-emner siden 2012. Findes på Mastodon på @aphandersen@ansico.dk

You may also like...

Abonner
Giv besked ved
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x