Woods Skrevet 23. oktober 2015 Del Skrevet 23. oktober 2015 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
BigJackW Skrevet 23. oktober 2015 Del Skrevet 23. oktober 2015 (endret) Se om denne fungerer. Finnes sikker flere løsninger på denne, mer elegant også. %% 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 23. oktober 2015 av BigJackW Lenke til kommentar
Torbjørn T. Skrevet 24. oktober 2015 Del Skrevet 24. oktober 2015 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå