LoslegenKostenlos loslegen

Gewichtetes Mittel (C++-Version)

Zeit, dein Wissen anzuwenden, indem du eine Funktion zum Berechnen des gewichteten Mittels eines Vektors erstellst.

Gegeben sind ein numerischer Vektor mit Datenwerten x und ein weiterer numerischer Vektor mit Gewichten w. Das gewichtete Mittel ist die Summe aus Datenwert mal Gewicht, geteilt durch die Summe der Gewichte. Hinweis: x und w sollten gleich viele Elemente haben.

In R wird es mit weighted.mean() berechnet, was sum(x * w) / sum(w) entspricht.

Diese Übung ist Teil des Kurses

R-Code mit Rcpp optimieren

Kurs anzeigen

Anleitung zur Übung

  • Vervollständige die Definition der Funktion weighted_mean_cpp().
    • Initialisiere total_xw und total_w mit Null und n mit der Größe von x.
    • Gib die Argumente der for-Schleife an, mit einer Ganzzahl i als Zähler.
    • Addiere in der Schleife das i-te Gewicht zu total_w und den i-ten Datenwert mal das i-te Gewicht zu total_xw.
    • Gib das Gesamtprodukt geteilt durch das Gesamtgewicht zurück.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

#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))
*/
Code bearbeiten und ausführen