[Rcpp-devel] Variable for loop

Avraham Adler avraham.adler at gmail.com
Tue Sep 27 04:22:50 CEST 2016


Please give a simple example of an input and its expected output.
Unfortunately "run of a variable for loop" is too general for me to
understand.

Avi

On Mon, Sep 26, 2016 at 10:07 PM, Amina Shahzadi
<aminashahzadi at gmail.com> wrote:
> Hi Dear
>
> My purpose is to make run of a variable for loop. Here I have assumed else
> statement to be zero. Otherwise it could be anything for example in the
> following code.
> In this code, my main aim to run the slices loop according to rows.
> does it now look ok?
>
>
> Thank you
>
> #include <RcppArmadillo.h>
> using namespace Rcpp;
> using namespace RcppArmadillo;
> //[[Rcpp::depends(RcppArmadillo)]]
> //[[Rcpp::export]]
> arma::cube up(arma::mat a){
>   int m = a.n_cols;
>   int n = a.n_rows;
>   int p = a.n_rows;
>   arma::cube b(n, m, p);
>   for(int i=0; i<n; i++){
>       for(int j=0; j<m; j++){
>         for(int q=0; q<i; q++){
>          if(q==0){
>            b(i, j, q) = a(i, j);
>          }
>          else{
>            b(i, j, q) = b(i-1, j, q-1) * a(i, j);
>          }
>       }
>     }
>   }
>   return b;
> }
>
> On Tue, Sep 27, 2016 at 2:51 PM, Avraham Adler <avraham.adler at gmail.com>
> wrote:
>>
>> Hello.
>>
>> Once again, it is very unclear what you want to do. Can you please
>> explain, in English not code what your procedure intends to do, the
>> input you expect, and the output you expect?
>>
>> What it LOOKS like you want to do is to create an N x M x N cube where
>> the first slice is your matrix and the remaining slices are all 0. If
>> that is the case, There are much, much simpler ways to do it than to
>> traverse all N²M cells. The following should work.
>>
>> #include <RcppArmadillo.h>
>> using namespace Rcpp;
>> using namespace RcppArmadillo;
>> //[[Rcpp::depends(RcppArmadillo)]]
>>
>> //[[Rcpp::export]]
>> arma::cube fillup(arma::mat a){
>>   int m = a.n_cols;
>>   int n = a.n_rows;
>>   arma::cube C = arma::cube(n, m, n, arma::fill::zeros);
>>
>>   C.slice(0) = a;
>>
>>   return(C);
>> }
>>
>> Avi
>>
>> On Mon, Sep 26, 2016 at 5:59 PM, Amina Shahzadi <aminashahzadi at gmail.com>
>> wrote:
>> > Hi Dear
>> >
>> > I have a problem in using a variable for loop in using RcppArmadillo
>> > library.
>> > I have pasting here my code. It is executing but not giving the same
>> > results
>> > as its R code version gives. The results produced by it are really
>> > weird. I
>> > have checked it step by step. It is because of the for (int q=0; q<i;
>> > q++).
>> > I request tp please help how to handle it in cpp.
>> >
>> > The another question is I want to multiply the cube b(i, ,) by a scalar.
>> > How
>> > can we consider the entire columns and slices of a cube for each of the
>> > rows.  "b(span(i), span(), span())"  is not working for me.
>> >
>> > Thank you
>> >
>> > #include <RcppArmadillo.h>
>> > using namespace Rcpp;
>> > using namespace RcppArmadillo;
>> > //[[Rcpp::depends(RcppArmadillo)]]
>> > //[[Rcpp::export]]
>> > arma::cube up(arma::mat a){
>> >   int m = a.n_cols;
>> >   int n = a.n_rows;
>> >   int p = a.n_rows;
>> >   arma::cube b(n, m, p);
>> >   for(int i=0; i<n; i++){
>> >       for(int j=0; j<m; j++){
>> >         for(int q=0; q<i; q++){
>> >          if(q==0){
>> >            b(i, j, q) = a(i, j);
>> >          }
>> >          else{
>> >            b(i, j, q) = 0.0;
>> >          }
>> >       }
>> >     }
>> >   }
>> >   return b;
>> > }
>> >
>> > --
>> > Amina Shahzadi
>
>
>
>
> --
> Amina Shahzadi


More information about the Rcpp-devel mailing list