[Rcpp-devel] a variable for loop

Avraham Adler avraham.adler at gmail.com
Wed Dec 14 04:46:07 CET 2016


On Tue, Dec 13, 2016 at 9:51 PM, Amina Shahzadi <aminashahzadi at gmail.com>
wrote:

> Hello Friends and Prof. Dirk
>
> I am pasting here a code which has a for loop depending on another for
> loop.
> I am getting zeros for cube c. I tried and searched a lot but did not get
> an example of this type. Would you please help in this regard?
>
>
> #include <RcppArmadillo.h>
> using namespace Rcpp;
> using namespace RcppArmadillo;
> using namespace arma;
> //[[Rcpp::depends(RcppArmadillo)]]
> //[[Rcpp::export]]
>
>
> arma::cube  exam(arma::vec a,  arma::mat b)
> {
>   int m = a.size();
>   int n = b.n_rows;
>   arma::cube c = zeros<cube>(n, m, n);
>   for(int i=0; i<n; i++) {
>     for(int j=0; j<m; j++) {
>       for(int k=0; k<i; k++) {
>           if(k==0) {
>             c(i, j ,k) = c(i, j, k) + b(i, j);
>           }
>           else{
>             c(i, j, k) = c(i, j, k) +  c(i-1, j, k) *b(i, j);
>           }
>          }
>         }
>       }
>   return c;
> }
>
>
> Thank You
> --
> *Amina Shahzadi*
>


Hello.

I haven't run your code, but it strikes me that I cannot see where are you
capturing the number of columns of b. It's a bit confusing as I was always
taught a matrix has m rows and n columns. Be that as it may, your k==0 loop
looks like it's trying to copy over the original matrix to the first slice,
but how do you know that b has m columns, which is what you're assuming by
letting j loop to m. Unless you are assuming a square matrix?

Even if you are, if your matrix is not the same length as your vector, I
think there is an issue with your loop boundaries, unless I've
misunderstood something, which is certainly possible.

For example, assume a is {1, 2, 3} and b is the 2 x 2 of row 1: [1 2] and
row 2: [3 4]. Thus m = 3 and n = 2.

Step 1: i = j = k = 0: c(0, 0, 0) becomes b(0, 0) or 1.

Step 2: i = 0, j = 1, k = 0: c(0, 1, 0) becomes b(0, 1) or 2.

Step 3: i = 0, j = 2, k = 0: c(0, 2, 0) becomes b(0, 2) ?!?! There is no
b(0, 2), it's only a 2x2 matrix?


Similar to your previous questions, instead of posting code, can you please
describe in words what it is you are trying to do? That may help.

Avi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20161213/cb9a93d9/attachment.html>


More information about the Rcpp-devel mailing list