Zacznij terazZacznij za darmo

Średnia ważona (wersja C++)

Czas wykorzystać zdobyte umiejętności i napisać funkcję obliczającą średnią ważoną wektora.

Dana jest numeryczna tablica wartości x oraz numeryczna tablica wag w. Średnia ważona to suma iloczynów wartości i wag, podzielona przez sumę wag. Pamiętaj, że x i w muszą mieć tę samą liczbę elementów.

W R oblicza się ją za pomocą weighted.mean(), które wykonuje działanie sum(x * w) / sum(w).

To ćwiczenie jest częścią kursu

Optymalizacja kodu R za pomocą Rcpp

Zobacz kurs

Instrukcje do ćwiczenia

  • Uzupełnij definicję funkcji weighted_mean_cpp().
    • Zainicjalizuj total_xw i total_w wartością zero, a n rozmiarem x.
    • Określ argumenty pętli for, używając liczby całkowitej i jako licznika.
    • Wewnątrz pętli dodaj i-tą wagę do total_w oraz iloczyn i-tej wartości i i-tej wagi do total_xw.
    • Zwróć całkowity iloczyn podzielony przez całkowitą sumę wag.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

#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))
*/
Edytuj i uruchom kod