8 svar
75 visningar
Elyan 38
Postad: 3 sep 15:19

Beräkna glidande medelvärde

Hej! Jag har programmerat en kod som ska ta emot en lista och fönster storlek beräkna den glidande medelvärdet, men för någon anledning får jag tillbaka fel siffror!

Jag bifogar min kod nedan och hoppas att någon kan hjälpa mig hitta felet!

Hondel 714
Postad: 3 sep 15:53

Vad får du för fel? Det brukar hjälpa väldigt mycket genom att titta på det.

Jag kan åtminstone gissa att det blir problem när i blir för stort. Eftersom du ska ta elementen från plats i till i+window_size, hur stort får i vara? Hur stort har du skrivit att i får vara innan du bryter loopen? 


Tillägg: 3 sep 2022 15:54

Eller förlåt, koden funkar och du får bara fel svar? 

Elyan 38
Postad: 3 sep 16:26
Hondel skrev:

Vad får du för fel? Det brukar hjälpa väldigt mycket genom att titta på det.

Jag kan åtminstone gissa att det blir problem när i blir för stort. Eftersom du ska ta elementen från plats i till i+window_size, hur stort får i vara? Hur stort har du skrivit att i får vara innan du bryter loopen? 


Tillägg: 3 sep 2022 15:54

Eller förlåt, koden funkar och du får bara fel svar? 

Tanken är att i ska loopa genom alla element i listan, därför tänkte jag att 

while i<len(list_input) borde sätta gränsen för i .

Men det jag får för svar är inte riktigt den glidande medelvärdet, till exempel om jag väljer window_size till 2 och kör denna 

print(moving_avergare([1,0,0,0,2])) får jag

[0.5, 0.0 , 0.0 , 1.0 , 0.0] medans den riktiga medelvärdet är [0.333 , 0.25 , 0.6 , 0.5 , 0.667]

Vet inte riktigt vad jag har gjort för fel här!

Hondel 714
Postad: 3 sep 17:11 Redigerad: 3 sep 17:15

ja du ska loppa igenom alla värden i listan. Prova att göra window size lite längre, funkar det fortfarande? 

 

Okej, hur beräknar du de ”riktiga” värdena? För jag tycker de värdena du får ut det rätt ut (givet att du ska vikta alla värden lika mycket) förutom att det avslutas med en 0 som inte borde vara där. 


Tillägg: 3 sep 2022 17:15

För relaterat till min fundering om i så tycker jag du borde få ett fel som säger något i stil med index out of range eftersom i+window_size borde hamna utanför din lista. Men det kanske är jag som tänker fel

Laguna Online 21062
Postad: 3 sep 18:01

Hur ska det kunna bli något annat än 0 i mitten av listan när fönsterstorleken är 2?

Hur kan det bli 0,333 utan att man har delat med 3? Var kommer den 3:an ifrån?

Elyan 38
Postad: 3 sep 18:09
Laguna skrev:

Hur ska det kunna bli något annat än 0 i mitten av listan när fönsterstorleken är 2?

Hur kan det bli 0,333 utan att man har delat med 3? Var kommer den 3:an ifrån?

Det som glidande medelvärde gör är att den tar (om window size är tex 2) den första elementen i lista + de 2 som är bredvid och dividerar med 3, dvs ((1+0+0)/3)

Därefter är det den andra element + de 2 element som är bredvid den (både från höger och vänster), i just detta fall är de bara 1 element till vänster och 2 till höger (därför blir det (1+0+0+0)/4)

Om window size är 3 tar den de 3 närmaste element osv...

Elyan 38
Postad: 3 sep 18:10
Hondel skrev:

ja du ska loppa igenom alla värden i listan. Prova att göra window size lite längre, funkar det fortfarande? 

 

Okej, hur beräknar du de ”riktiga” värdena? För jag tycker de värdena du får ut det rätt ut (givet att du ska vikta alla värden lika mycket) förutom att det avslutas med en 0 som inte borde vara där. 


Tillägg: 3 sep 2022 17:15

För relaterat till min fundering om i så tycker jag du borde få ett fel som säger något i stil med index out of range eftersom i+window_size borde hamna utanför din lista. Men det kanske är jag som tänker fel

Får ändå fel värde, har precis kommenterat nedan hur de riktiga värdena skall beräknas!:)

Laguna Online 21062
Postad: 3 sep 18:16

Jaha, så storleken är egentligen 5?

Då borde du använda 2*window_size+1 i funktionen, och dessutom inte börja på i varje gång, utan i-window_size.

Laguna Online 21062
Postad: 7 sep 11:23

Hur gick det?

Svara Avbryt
Close