1. Učit se
  2. /
  3. Kurzy
  4. /
  5. Optimizing R Code with Rcpp

Connected

cvičení

Klouzavé průměry (v C++)

Vektorizovaná funkce pro výpočet klouzavého průměru rollmean3() vykazovala skvělý výkon, ale velmi slabou čitelnost. Kód vůbec neprozrazuje, že počítá klouzavý průměr, což funkci ztěžuje ladění i údržbu.

Druhá verze, rollmean2(), byla sice pomalejší, ale čitelnější. Pokud ji přepíšeme do C++, měli bychom získat přehledný kód i rychlý výkon zároveň.

rollmean2() je definována v tvém pracovním prostředí – její definici si můžeš vypsat, abys osvěžil/a, jak funguje. Teď ji přepiš do C++ a výsledek ulož jako rollmean4().

Pokyny

100 XP
  • Nastav res jako NumericVector s délkou n a hodnotami získanými metodou get_na() třídy NumericVector.
  • Vypočítej total jako součet prvních window hodnot vektoru x.
  • Vypočítej průměr na pozici window - 1 jako total vydělený šířkou okna.
  • Ve druhém cyklu aktualizuj total odečtením i - window-tého prvku vektoru x a přičtením i-tého prvku vektoru x.