Moyenne pondérée (version C++)
Il est temps de mettre vos compétences en pratique en créant une fonction qui calcule la moyenne pondérée d’un vecteur.
Étant donné un vecteur numérique de valeurs, x, et un autre vecteur numérique de poids, w, la moyenne pondérée est la somme des valeurs multipliées par leurs poids, divisée par la somme des poids. Notez que x et w doivent avoir le même nombre d’éléments.
En R, elle se calcule avec weighted.mean(), qui effectue sum(x * w) / sum(w).
Cet exercice fait partie du cours
Optimiser du code R avec Rcpp
Instructions
- Complétez la définition de la fonction
weighted_mean_cpp().- Initialisez
total_xwettotal_wà zéro, etnà la taille dex. - Spécifiez les arguments de la boucle
for, avec un entiericomme compteur. - À l’intérieur de la boucle, ajoutez le poids en position i à
total_wet la valeur en position i multipliée par le poids en position i àtotal_xw. - Retournez le produit total divisé par le poids total.
- Initialisez
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
#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))
*/