2016-04-30 7 views
-2

Ich möchte über die Verwendung einer temporären Variable, um die k-te Zeile der Matrix zu ersetzen fragen.Ersetzen der `k`-ten Zeile einer Matrix mit Null in Rcpp

Ich möchte eine Reihe von X durch Null ersetzt werden.

Also, ich habe eine Kopie von XYnew1, genannt erstellt und in jeder Iteration der Wert von Ynew1 durch X (erster Wert) aktualisiert. Aber in meinem Code werden nicht nur die Zeilen Ynew1 durch 0 ersetzt, sondern auch die X. Leider ist das Ergebnis Ynew1 ist Matrix alle Null (ich erwartete das Ergebnis nur letzte Zeile hat Nullwert). Dies ist der Code:

cppFunction(' 
      NumericMatrix cobo(NumericMatrix X){ 
      int n = X.nrow(); 
      NumericMatrix Ynew1(n,1); 

      for (int k=0;k<n;k++){ 
       Ynew1 = X; 
       for(int i=0;i<n;i++){ 
        Ynew1(k,i)=0; 
       } 
      } 

      return(Ynew1); 
      } 
      ') 

Antwort

2

Okay. Ich denke, das Ziel Sie versuchen zu erreichen ist die folgende:

ersetzen die k -te Reihe von x von Null

Die for-Schleife Struktur, die Sie verwenden, ist nicht ideal. Bei jeder i- oder Zeileniteration kopieren Sie x erneut in Ynew und fahren dann fort, die Zeile auf Null zu setzen.

In diesem Fall sollten Sie nur die wie so k ten Zeile Targeting werden:

cppFunction(' 
// @param x A \code{matrix} with dimensions n x m. 
// @param k An \code{unsigned int} whose index begins at 1. 
// @return A \code{matrix} with row \code{k} equal to zero. 
Rcpp::NumericMatrix cobo(Rcpp::NumericMatrix x, unsigned int k){ 
    unsigned int n = x.nrow(); 

    // Bounds check 
    if(k - 1 >= n){ stop("OOB Error"); } 

    // Replace row by a vector of zeros. 
    x(k - 1, Rcpp::_) = Rcpp::NumericVector(x.ncol()); 

    return x; 
} 
') 

Hinweis: Die Funktion R Eingangsmatrix verarbeitet. (Beispielsweise annimmt beginnt Index bei 1 und nicht C++ ist 0.)

Beispiel:

set.seed(11) # Set seed for reproducibility 
(x = matrix(rnorm(10),nrow = 5)) 

      [,1]  [,2] 
[1,] -0.59103110 -0.93415132 
[2,] 0.02659437 1.32360565 
[3,] -1.51655310 0.62491779 
[4,] -1.36265335 -0.04572296 
[5,] 1.17848916 -1.00412058 

cobo(x, 3) 

      [,1]  [,2] 
[1,] -0.59103110 -0.93415132 
[2,] 0.02659437 1.32360565 
[3,] 0.00000000 0.00000000 
[4,] -1.36265335 -0.04572296 
[5,] 1.17848916 -1.00412058 
Verwandte Themen