Afsnit ML.3: Indlæsning, dataframe og matriks
Jeg vil beskrive to forskellige indlæsningssituationer. I den
første situation skal vi blot indlæse en følge af tal uden nogen speciel struktur.
Enten er alle tallene på første linje adskildt af et eller flere mellemrum, eller
også er der et enkelt tal på hver linje.
I denne situation bruger man
load:
load("filnavn")
hvilket giver en vektor med tallene (række- eller søjlevektor afhængig af input).
I den anden datasituation er data organiseret i søjler, typisk med
søjleoverskrifter, og data i en række er adskildt af komma
(hvorfor datafilen har endelsen "csv"). Data indlæses med kommandoen
readtable:
readtable("filnavn",'TextType','string')
Hvis der ikke er søjleoverskrifter i datafilen, skal
man tilføje
'ReadVariableNames',false til kaldet.
Hvis første søjle indeholder rækkenavne, skal man tilføje
'ReadRowNames',true til kaldet.
Hvis det indlæste er placeret i
mydata, er dette en MATLAB
table. Man
kan tænke på dette som en liste af søjler (variable),
alle med samme længde.
Man kan få adgang til en søjle ved hjælp af dennes navn.
Hvis for eksempel der er en søjle med navnet
Soejle1, får man
denne med kommandoen
mydata.Soejle1
Det første element i søjlen kan man få med kommandoen
mydata.Soejle1(1). Alternativt
kan man også bruge en matriksindeksering til at udtrække
elementer fra
mydata, men i dette tilfælde er
resultatet stadig en tabel.
I kodedelen nedenfor indlæses data fra en fil
Ind.csv med indholdet
Efter indlæsningen deles
Alder op i to datasæt alt efter køn.
>> dat=readtable("Ind.csv",'TextType','string');
>> dat
dat =
5×2 table
Koen Alder
_______ _____
"Pige" 7
"Pige" 2
"Dreng" 5
"Dreng" 7
"Dreng" 3
>> alderPige=dat.Alder(dat.Koen=="Pige")
alderPige =
7
2
>> alderDreng=dat.Alder(dat.Koen=="Dreng")
alderDreng =
5
7
3
Man kan selv lave datatabeller inde i MATLAB. Dette er omtalt i
afsnit
6.6.
ML.3.1 Matricer
Ligesom data kan organiseres i vektorer i MATLAB, kan de også organiseres i
matricer, det vil sige en struktur med et antal rækker og et antal søjler.
En matrix kan dannes ved at angive de enkelte rækker
adkildt af semicolon, for eksempel
en
matrix:
[[x11,x12,x13;x21,x22,x23]
Ved at benytte
reshape kan den samme matrix også laves med kommandoen
reshape([x11,x12,x13,x21,x22,x23],[3,2])'
>> A=[1,2,3,4;5,6,7,8;9,10,11,12];
>> A
A =
1 2 3 4
5 6 7 8
9 10 11 12
>> A' % A transponeret
ans =
1 5 9
2 6 10
3 7 11
4 8 12
>> A(2,3) % indgang (2,3)
ans = 7
>> A(2,:) % række 2
ans = 5 6 7 8
>> A(:,2) % søjle 2
ans =
2
6
10
>> A(:)' % alle indgangene som en rækkevektor
ans = 1 5 9 2 6 10 3 7 11 4 8 12
>> max(A) % maximum indenfor hver søjle
ans = 9 10 11 12
>> max(A(:)) % maximum over alle indgange
ans = 12
>> sum(A) % søjlesummer
ans = 15 18 21 24
>> sum(A') % rækkesummer
ans = 10 26 42
Matrixmultiplication betegnes blot med
*, og den
inverse af en kvadratisk matrix fås med
inv.
>> A=[1,2;3,4];
>> B=[1,2,3;4,5,6];
>> A*B
ans =
9 12 15
19 26 33
>> inv(A)
ans =
-2.0000 1.0000
1.5000 -0.5000
>> A*inv(A)
ans =
1.0000 0
0.0000 1.0000
>> v=[1,2];
>> v*A
ans = 7 10
>> A*v
Error using *
Inner matrix dimensions must agree.
ForegåendeNæste