CommencerCommencer gratuitement

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

Afficher le cours

Instructions

  • Complétez la définition de la fonction weighted_mean_cpp().
    • Initialisez total_xw et total_w à zéro, et n à la taille de x.
    • Spécifiez les arguments de la boucle for, avec un entier i comme compteur.
    • À l’intérieur de la boucle, ajoutez le poids en position i à total_w et la valeur en position i multipliée par le poids en position i à total_xw.
    • Retournez le produit total divisé par le poids total.

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))
*/
Modifier et exécuter le code