Ağırlıklı ortalama (C++ sürümü)
Bir vektörün ağırlıklı ortalamasını hesaplayan bir fonksiyon oluşturarak becerilerini uygulama zamanı.
Sayısal veri değerlerinden oluşan bir x vektörü ve ağırlıklardan oluşan bir başka sayısal w vektörü verildiğinde, ağırlıklı ortalama; veri değerleri ile ağırlıkların çarpımlarının toplamının, ağırlıkların toplamına bölünmesidir. x ve w'nin aynı sayıda elemana sahip olması gerektiğini unutma.
R'de bu işlem weighted.mean() ile yapılır; bu da sum(x * w) / sum(w) hesaplar.
Bu egzersiz, kursun bir parçasıdır
Rcpp ile R Kodunu Optimize Etme
Egzersiz talimatları
weighted_mean_cpp()fonksiyonunun tanımını tamamla.total_xwvetotal_w'yi sıfıra,n'i isex'in boyutuna ayarla.- Sayaç olarak bir tamsayı
ikullanarakfordöngüsünün argümanlarını belirt. - Döngü içinde, i. ağırlığı
total_w'ye ve i. veri değeri ile i. ağırlığın çarpımınıtotal_xw'ye ekle. - Toplam çarpımı toplam ağırlığa bölerek döndür.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
#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))
*/