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