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 x và w 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
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_xwvàtotal_wbằng 0, vànbằng kích thước củax. - Chỉ định các tham số cho vòng lặp
for, với một số nguyênilàm biến đếm. - Bên trong vòng lặp, cộng trọng số thứ i vào
total_wvà cộng giá trị dữ liệu thứ i nhân với trọng số thứ i vàototal_xw. - Trả về tổng tích chia cho tổng trọng số.
- Khởi tạo
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))
*/