Gå til innhold
Trenger du skole- eller leksehjelp? Still spørsmål her ×

Matlab - hente info fra datasett


Anbefalte innlegg

Hei, 

 

jeg har et datasett som inneholder 4 kolonner. De tre første kolonnene inneholder årstall, måned og dag. Den fjerde inneholder en mengde antall liter bensin solgt på gitt dag. 

 

Jeg skal regne ut hvor mange liter bensin som er solgt i 2005, 2006 og 2007. Hvert 'år' skal ligge mellom 10. juni til 11. juni året etter. 

 

Spørsmål: Hvordan kan jeg hente ut data på grunnlag av dette, ved hjelp av en For-løkke? 

 

Jeg tenker: Hvis dato 10/06-2005 - > skriv ut data som står i kolonne 4. 

 

 

Takk for hjelp. 

Lenke til kommentar
Videoannonse
Annonse

Se om denne fungerer. Finnes sikker flere løsninger på denne, mer elegant også. :p

%% Hente data fra "database"
data = load('datasett.txt');
y = data(:,1); % År
m = data(:,2); % Måned
d = data(:,3); % Dag
bensin = data(:,4); % Daglig liter bensin
 
%% Sortere data etter dato
dato = datetime([y m d]);
 
[datoSortert, index] = sort(dato);
bensinSortert = bensin(index);
 
bensinSolgt = zeros((max(y) - min(y)+1), 2); % Lage en matrise for plassering av årstall og antall liter solgt
 
%% Addering av solgt bensin
for n = 0:(max(y) - min(y)) % "Årlig" For-løkke
    yy = min(y) + n;
    bensinSolgt(n+1,1) = yy; % Årstall i kolonne 1 i matrise
    
    for m = 1:length(data) % "Daglig" For-løkke
        if ( datoSortert(m) >= datetime(yy, 6, 10) && datoSortert(m) <= datetime(yy+1, 6, 10) )
            bensinSolgt(n+1,2) = bensinSolgt(n+1,2) + bensinSortert(m); % Solgt bensin i kolonne 2 i matrise
        end
    end    
end

Edit: Har du mulighet til å legge ut datafila? Hadde vært morro å prøve litt.

Endret av BigJackW
Lenke til kommentar

Er vel berre å bruke litt fornuftig indeksering saman med sum-funksjonen. Som eit kjapt døme:

 

% lage data tilsvarande det du har
dagar = datenum(2000,1,1:4000);
dagar = datevec(dagar);
dagar = dagar(:,1:3);
liter = randi(1000,4000,1);

data = [dagar liter];

% ei mogeleg løysing av oppgåva
dag = datenum(data(:,1:3));
liter = data(:,4);

aar = [2005,2006,2007];

totalliter = NaN(size(aar));

for i = 1:length(aar)
    start = datenum(aar(i),6,10);
    stopp = datenum(aar(i)+1,6,10);
    totalliter(i) = sum(liter(dag>=start & dag<stopp));
    disp(sprintf('Fraa %s til %s vart det selgt %ul bensin', ...
                 datestr(start,'mm/dd-yyyy'), ...
                 datestr(stopp,'mm/dd-yyyy'), ...
                 totalliter(i)))
end
Som vil skrive ut

 

Fraa 06/10-2005 til 06/10-2006 vart det selgt 190596l bensin
Fraa 06/10-2006 til 06/10-2007 vart det selgt 186522l bensin
Fraa 06/10-2007 til 06/10-2008 vart det selgt 185532l bensin
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...