BaşlayınÜcretsiz başlayın

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

Kursa Göz Atın

Egzersiz talimatları

  • weighted_mean_cpp() fonksiyonunun tanımını tamamla.
    • total_xw ve total_w'yi sıfıra, n'i ise x'in boyutuna ayarla.
    • Sayaç olarak bir tamsayı i kullanarak for dö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))
*/
Kodu Düzenle ve Çalıştır