Ś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
Instrukcje do ćwiczenia
- Uzupełnij definicję funkcji
weighted_mean_cpp().- Zainicjalizuj
total_xwitotal_wwartością zero, anrozmiaremx. - Określ argumenty pętli
for, używając liczby całkowitejijako licznika. - Wewnątrz pętli dodaj i-tą wagę do
total_woraz iloczyn i-tej wartości i i-tej wagi dototal_xw. - Zwróć całkowity iloczyn podzielony przez całkowitą sumę wag.
- Zainicjalizuj
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))
*/