2012-11-10 19 views
5

R'de tanımlanmış bir matrisim var. Bu matrisi C++ işlevine geçirmem ve C++ işlemlerini gerçekleştirmem gerekiyor. Örnek: R ise, I 'couldnR'de bir matris tanımlayın ve C++'ye iletin.

tip vector<vector<double>> değişken 'veri' matris A ile başlatılır C++ fonksiyon için bu matris geçmesi gerekir

A <- matrix(c(9,3,1,6),2,2,byrow=T) 
PROTECT(A = AS_NUMERIC(A)); 
double* p_A = NUMERIC_POINTER(A); 

bir matris tanımlamak Bunu nasıl yapacağımı anlamaya çalışıyor. Daha karmaşık bir şekilde düşünüyorum, o zaman olmalıyım, bahse girerim bunu yapmanın kolay bir yolu vardır.

+2

Bu vektör 'olarak mağaza matrisleri için oldukça salak >'; Şüphesiz, daha iyi okunabilirlik sağlamak için bellek parçalanması ve hizalama optimizasyonunun kırılması riskine girersiniz. Dahası, bu şekilde halihazırda bellekte mevcut olan ve kullanıma hazır olan verileri kopyaladığınızdan - bu önemli bir yük! – mbq

cevap

5

Paul'ün dediği gibi, bu tür şeyler için Rcpp'u kullanmanızı tavsiye ederim. Ama aynı zamanda vector< vector<double> >'un ne demek istediğine bağlı. Bu gibi matris işlemek olabilir, sütunları saklamak istediğiniz varsayarsak:

require(Rcpp) 
require(inline) 

fx <- cxxfunction(signature(x_ = "matrix"), ' 
    NumericMatrix x(x_) ; 
    int nr = x.nrow(), nc = x.ncol() ; 
    std::vector< std::vector<double> > vec(nc) ; 
    for(int i=0; i<nc; i++){ 
     NumericMatrix::Column col = x(_,i) ; 
     vec[i].assign(col.begin() , col.end()) ; 
    } 
    // now do whatever with it 
    // for show here is how Rcpp::wrap can wrap vector<vector<> > 
    // back to R as a list of numeric vectors 
    return wrap(vec) ; 
', plugin = "Rcpp") 
fx(A) 
# [[1]] 
# [1] 9 1 
# 
# [[2]] 
# [1] 3 6  
+3

için yararlı olurdu Rcpp harika :) –

+0

Teşekkürler, deneyeceğim! – intsymmetry

+0

Sen varken. Yanıtı kabul etmeyi düşünelim :-) –

5

Muhtemelen Rcpp kullanmak istiyorsunuz. Bu paket, R'den C++'ya geçiş yapmak da dahil olmak üzere R ve C++ ile kolay entegrasyon sağlar. Paket CRAN'da mevcuttur. Buna ek olarak, CRAN'da bir takım paketler Rcpp kullanıyor, bu yüzden ilham kaynağı olabilirler. Rcpp web sitesi burada: Birkaç ders içermektedir

http://dirk.eddelbuettel.com/code/rcpp.html

.

+0

daha hızlı davranıyorsunuz. Biraz et ile de cevaplayacağım. –

+1

Teşekkürler, bu OP –

İlgili konular