[Rcpp-devel] a variable for loop

Serguei Sokol serguei.sokol at gmail.com
Wed Dec 14 10:29:43 CET 2016


Hi Amina,

Looks like you want us to do your homework, right? ;)

Pay attention to subscript translation from R to C:

c[i-1, j, k-1] * b[i, j]
vs
c(i-1, j, k) *b(i, j)

Can you see the difference?

Best,
Serguei.

Le 14/12/2016 à 07:46, Amina Shahzadi a écrit :
> Oh sorry. No. of columns in b and size of a must always be same.
> I have made an r code to show the output.
>
>
> a = c(1, 2, 3)
> b = matrix(1:30, nrow=10, ncol=3)
> c = array(as.double(0), dim=c(10, 3, 10))
> for(i in 1:10){
>   for(j in 1:3){
>     for(k in 1:i){
>       if(k==1) c[i, j, k] = b[i, j]
>       else c[i, j, k] = c[i-1, j, k-1] * b[i, j]
>     }
>   }
> }
>
> Output:
>
>> c , , 1
>
>       [,1] [,2] [,3]
>  [1,]    1   11   21
>  [2,]    2   12   22
>  [3,]    3   13   23
>  [4,]    4   14   24
>  [5,]    5   15   25
>  [6,]    6   16   26
>  [7,]    7   17   27
>  [8,]    8   18   28
>  [9,]    9   19   29
> [10,]   10   20   30
>
> , , 2
>
>       [,1] [,2] [,3]
>  [1,]    0    0    0
>  [2,]    2  132  462
>  [3,]    6  156  506
>  [4,]   12  182  552
>  [5,]   20  210  600
>  [6,]   30  240  650
>  [7,]   42  272  702
>  [8,]   56  306  756
>  [9,]   72  342  812
> [10,]   90  380  870
>
> , , 3
>
>       [,1] [,2]  [,3]
>  [1,]    0    0     0
>  [2,]    0    0     0
>  [3,]    6 1716 10626
>  [4,]   24 2184 12144
>  [5,]   60 2730 13800
>  [6,]  120 3360 15600
>  [7,]  210 4080 17550
>  [8,]  336 4896 19656
>  [9,]  504 5814 21924
> [10,]  720 6840 24360
>
> , , 4
>
>       [,1]   [,2]   [,3]
>  [1,]    0      0      0
>  [2,]    0      0      0
>  [3,]    0      0      0
>  [4,]   24  24024 255024
>  [5,]  120  32760 303600
>  [6,]  360  43680 358800
>  [7,]  840  57120 421200
>  [8,] 1680  73440 491400
>  [9,] 3024  93024 570024
> [10,] 5040 116280 657720
>
> , , 5
>
>        [,1]    [,2]     [,3]
>  [1,]     0       0        0
>  [2,]     0       0        0
>  [3,]     0       0        0
>  [4,]     0       0        0
>  [5,]   120  360360  6375600
>  [6,]   720  524160  7893600
>  [7,]  2520  742560  9687600
>  [8,]  6720 1028160 11793600
>  [9,] 15120 1395360 14250600
> [10,] 30240 1860480 17100720
>
> , , 6
>
>         [,1]     [,2]      [,3]
>  [1,]      0        0         0
>  [2,]      0        0         0
>  [3,]      0        0         0
>  [4,]      0        0         0
>  [5,]      0        0         0
>  [6,]    720  5765760 165765600
>  [7,]   5040  8910720 213127200
>  [8,]  20160 13366080 271252800
>  [9,]  60480 19535040 342014400
> [10,] 151200 27907200 427518000
>
> , , 7
>
>         [,1]      [,2]        [,3]
>  [1,]      0         0           0
>  [2,]      0         0           0
>  [3,]      0         0           0
>  [4,]      0         0           0
>  [5,]      0         0           0
>  [6,]      0         0           0
>  [7,]   5040  98017920  4475671200
>  [8,]  40320 160392960  5967561600
>  [9,] 181440 253955520  7866331200
> [10,] 604800 390700800 10260432000
>
> , , 8
>
>          [,1]       [,2]         [,3]
>  [1,]       0          0            0
>  [2,]       0          0            0
>  [3,]       0          0            0
>  [4,]       0          0            0
>  [5,]       0          0            0
>  [6,]       0          0            0
>  [7,]       0          0            0
>  [8,]   40320 1764322560 125318793600
>  [9,]  362880 3047466240 173059286400
> [10,] 1814400 5079110400 235989936000
>
> , , 9
>
>          [,1]        [,2]         [,3]
>  [1,]       0           0 0.000000e+00
>  [2,]       0           0 0.000000e+00
>  [3,]       0           0 0.000000e+00
>  [4,]       0           0 0.000000e+00
>  [5,]       0           0 0.000000e+00
>  [6,]       0           0 0.000000e+00
>  [7,]       0           0 0.000000e+00
>  [8,]       0           0 0.000000e+00
>  [9,]  362880 33522128640 3.634245e+12
> [10,] 3628800 60949324800 5.191779e+12
>
> , , 10
>
>          [,1]         [,2]         [,3]
>  [1,]       0            0 0.000000e+00
>  [2,]       0            0 0.000000e+00
>  [3,]       0            0 0.000000e+00
>  [4,]       0            0 0.000000e+00
>  [5,]       0            0 0.000000e+00
>  [6,]       0            0 0.000000e+00
>  [7,]       0            0 0.000000e+00
>  [8,]       0            0 0.000000e+00
>  [9,]       0            0 0.000000e+00
> [10,] 3628800 670442572800 1.090274e+14
>
>
>
>
> On Wed, Dec 14, 2016 at 7:27 PM, Avraham Adler <avraham.adler at gmail.com <mailto:avraham.adler at gmail.com>> wrote:
>
>
>
>     On Wed, Dec 14, 2016 at 1:24 AM Amina Shahzadi <aminashahzadi at gmail.com <mailto:aminashahzadi at gmail.com>> wrote:
>
>         Hello Avraham --Happy to see you
>
>         My code is trying to produce a cube c which is going to be constructed by a vector a and matrix b.
>         And the number of rows in b and size of a must be same.
>
>         So we can assume that if a is a vector of size 3, Then b must be 2 x 3 or 3 X 3 etc.
>
>         Thank you Avraham for quick response. I hope this will make my question more clear.
>
>         Best regards
>
>
>         On Wed, Dec 14, 2016 at 4:46 PM, Avraham Adler <avraham.adler at gmail.com <mailto:avraham.adler at gmail.com>> wrote:
>
>             On Tue, Dec 13, 2016 at 9:51 PM, Amina Shahzadi <aminashahzadi at gmail.com <mailto: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
>
>
>
>
>
>
>         --
>         /Amina Shahzadi/
>
>
>     Constructed how? Can you provide a simple set of inputs and the expected output?
>
>     Avi
>     --
>     Sent from Gmail Mobile
>
>
>
>
> --
> /Amina Shahzadi/
>
>
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>



More information about the Rcpp-devel mailing list