Rcpp officially added rowSum
support in 0.12.8। इसलिए, उन्नत आर
में हेडली द्वारा तैयार किए गए rowSumsC
फ़ंक्शन का उपयोग करने की कोई आवश्यकता नहीं है, यह कहकर, कोड के साथ कुछ समस्याएं हैं।
Rcpp वर्तमान नहीं समर्थन Matrix
Vector
करने के लिए या Matrix
Matrix
संगणना के लिए करता है। (बाद में समर्थन #583 में जोड़ा जा सकता है, हालांकि यदि आवश्यक हो तो RcppArmadillo
या RcppEigen
का उपयोग करने पर विचार करना चाहिए)। इसलिए, निम्न पंक्ति समस्याग्रस्त है:
w = w/rowSums(w)
इसका समाधान करने के लिए, पहले rowSums
गणना और फिर मैट्रिक्स एक पारंपरिक for
पाश का उपयोग कर मानकीकरण। नोट: सी ++ में लूपिंग आर के विपरीत बहुत तेज है।
NumericVector summed_by_row = rowSums(w);
for (int i = 0; i < k; ++i) {
w(_,i) = w(_,i)/summed_by_row[i];
}
इसके बाद, सी ++ सूचकांक 0
नहीं 1
पर शुरू करते हैं। इसलिए, पाश के लिए निम्नलिखित समस्याग्रस्त है:
for (int i=1; i<k; ++i)
ठीक:
for (int i=0; i<k; ++i)
अन्त में, समारोह के मापदंडों मूल्यों के कुछ अप्रासंगिक हैं या अधिरोहित कर रहे हैं के रूप में कम किया जा सकता । एक साथ उपर प्रतिक्रिया के सभी लाना
NumericMatrix Expcpp(NumericVector x, NumericVector mu, NumericVector var, NumericVector prob) {
int n = x.size();
int k = mu.size();
NumericMatrix w = no_init(n,k);
.....
, हम वांछित समारोह मिलती है:
NumericMatrix Expcpp(NumericVector x, NumericMatrix w,
NumericVector mu, NumericVector var, NumericVector prob, int k)
करने के लिए:
समारोह घोषणा से चला जाता है।
Rcpp::cppFunction(
'NumericMatrix Expcpp(NumericVector x, NumericVector mu, NumericVector var, NumericVector prob) {
int n = x.size();
int k = mu.size();
NumericMatrix w = no_init(n,k);
for (int i = 0; i < k; ++i) { // C++ indices start at 0
w(_,i) = prob[i] * dnorm(x, mu[i], sqrt(var[i]));
}
Rcpp::Rcout << "Before: " << std::endl << w << std::endl;
NumericVector summed_by_row = rowSums(w);
Rcpp::Rcout << "rowSum: " << summed_by_row << std::endl;
// normalize by column to mimic R
for (int i = 0; i < k; ++i) {
w(_,i) = w(_,i)/summed_by_row[i];
}
Rcpp::Rcout << "After: " << std::endl << w << std::endl;
return w;
}')
set.seed(51231)
# Test values
n <- 2
x <- seq_len(n)
mu <- x
var <- x
prob <- runif(n)
mat <- Expcpp(x, mu, var, prob)
आउटपुट
Before:
0.0470993 0.125384
0.0285671 0.160996
rowSum: 0.172483 0.189563
After:
0.273066 0.661436
0.165623 0.849300
कृपया एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण (जैसे पद कोड और कॉल) बना सकते हैं। इसके अलावा, 'rowSums' के बराबर एक आरसीपीपी चीनी है। इसे आरसीपीपी 0.12.8 – coatless
में जोड़ा गया था मैंने कोड अपलोड किया है। मैं वास्तव में इसे कॉल नहीं कर सकता क्योंकि इसे परिभाषित नहीं किया जा सकता है क्योंकि पंक्तियों की पहचान नहीं की जा रही है। RowSums के समतुल्य आरसीपीपी का नाम क्या है और क्या मुझे इसे कॉल करने के लिए अतिरिक्त कुछ करना है? मैं वास्तव में आरसीपीपी के लिए नया हूँ। –