IniziaInizia gratis

Media pesata (versione C++)

È il momento di mettere in pratica le tue abilità creando una funzione per calcolare la media pesata di un vettore.

Dato un vettore numerico di valori, x, e un altro vettore numerico di pesi, w, la media pesata è la somma dei valori moltiplicati per i pesi divisa per la somma dei pesi. Nota che x e w devono avere lo stesso numero di elementi.

In R si calcola con weighted.mean(), che fa sum(x * w) / sum(w).

Questo esercizio fa parte del corso

Ottimizzare il codice R con Rcpp

Visualizza il corso

Istruzioni dell'esercizio

  • Completa la definizione della funzione weighted_mean_cpp().
    • Inizializza total_xw e total_w a zero e n alla dimensione di x.
    • Specifica gli argomenti del ciclo for, con un intero i come contatore.
    • All'interno del ciclo, aggiungi l'i-esimo peso a total_w e l'i-esimo valore dei dati moltiplicato per l'i-esimo peso a total_xw.
    • Restituisci il prodotto totale diviso per il peso totale.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

#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))
*/
Modifica ed esegui il codice