Začněte nyníZačněte zdarma

Vážený průměr (verze v C++)

Teď je čas využít nabyté dovednosti a napsat funkci pro výpočet váženého průměru vektoru.

Máš číselný vektor datových hodnot x a číselný vektor vah w. Vážený průměr je součet součinů datových hodnot a vah dělený celkovým součtem vah. Poznámka: vektory x a w musí mít stejný počet prvků.

V R se vážený průměr počítá funkcí weighted.mean(), která provádí výpočet sum(x * w) / sum(w).

Toto cvičení je součástí kurzu

Optimizing R Code with Rcpp

Zobrazit kurz

Pokyny k cvičení

  • Dokonči definici funkce weighted_mean_cpp().
    • Inicializuj total_xw a total_w na nulu a n na velikost x.
    • Zadej argumenty cyklu for s celým číslem i jako čítačem.
    • Uvnitř cyklu přičti i-tou váhu k total_w a součin i-té datové hodnoty a i-té váhy k total_xw.
    • Vrať celkový součin dělený celkovou vahou.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

#include 
using namespace Rcpp;

// [[Rcpp::export]]
double weighted_mean_cpp(NumericVector x, NumericVector w) {
  // Initialize these to zero
  double total_w = ___;
  double total_xw = ___;
  
  // Set n to the size of x
  int n = ___;
  
  // Specify the for loop arguments
  for(int i = 0; ___) {
    // Add ith weight
    total_w += ___;
    // Add the ith data value times the ith weight
    total_xw ___;
  }
  
  // Return the total product divided by the total weight
  return ___;
}

/*** R 
x <- c(0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11)
w <- 1 / seq_along(x)
weighted_mean_cpp(x, w)
# Does the function give the same results as R's weighted.mean() function?
all.equal(weighted_mean_cpp(x, w), weighted.mean(x, w))
*/
Upravit a spustit kód