Bắt đầu ngayBắt đầu miễn phí

Trung bình có trọng số (phiên bản C++)

Đến lúc vận dụng kỹ năng của bạn: hãy viết một hàm để tính trung bình có trọng số của một vector.

Với một vector số các giá trị dữ liệu x và một vector số các trọng số w, trung bình có trọng số là tổng của các giá trị dữ liệu nhân với trọng số, chia cho tổng các trọng số. Lưu ý rằng xw phải có cùng số phần tử.

Trong R, có thể tính bằng weighted.mean(), tương đương với sum(x * w) / sum(w).

Bài tập này là một phần của khóa học

Tối ưu hóa mã R với Rcpp

Xem khóa học

Hướng dẫn bài tập

  • Hoàn thiện định nghĩa hàm weighted_mean_cpp().
    • Khởi tạo total_xwtotal_w bằng 0, và n bằng kích thước của x.
    • Chỉ định các tham số cho vòng lặp for, với một số nguyên i làm biến đếm.
    • Bên trong vòng lặp, cộng trọng số thứ i vào total_w và cộng giá trị dữ liệu thứ i nhân với trọng số thứ i vào total_xw.
    • Trả về tổng tích chia cho tổng trọng số.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

#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))
*/
Chỉnh sửa và Chạy Mã