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
Pokyny k cvičení
- Dokonči definici funkce
weighted_mean_cpp().- Inicializuj
total_xwatotal_wna nulu anna velikostx. - Zadej argumenty cyklu
fors celým číslemijako čítačem. - Uvnitř cyklu přičti i-tou váhu k
total_wa součin i-té datové hodnoty a i-té váhy ktotal_xw. - Vrať celkový součin dělený celkovou vahou.
- Inicializuj
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))
*/