ÎncepețiÎncepe gratuit

Media ponderată (versiunea C++)

Este momentul să îți pui cunoștințele în practică, creând o funcție care calculează media ponderată a unui vector.

Dat fiind un vector numeric de valori, x, și un alt vector numeric de ponderi, w, media ponderată este suma produselor dintre valorile datelor și ponderi, împărțită la suma ponderilor. Reține că x și w trebuie să aibă același număr de elemente.

În R, aceasta se calculează cu weighted.mean(), care face sum(x * w) / sum(w).

Acest exercițiu face parte din cursul

Optimizarea codului R cu Rcpp

Vezi cursul

Instrucțiuni pentru exercițiu

  • Completează definiția funcției weighted_mean_cpp().
    • Inițializează total_xw și total_w cu zero, iar n cu dimensiunea lui x.
    • Specifică argumentele buclei for, folosind un număr întreg, i, drept contor.
    • În interiorul buclei, adaugă ponderea de pe poziția i la total_w și produsul dintre valoarea de pe poziția i și ponderea de pe poziția i la total_xw.
    • Returnează produsul total împărțit la ponderea totală.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

#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))
*/
Editează și rulează codul