Multiplying one matrix by many scalars

I have an R script that systematically perform 3x3 matrix changes using scalar multiplication as follows

R <- matrix(rexp(9, rate=.1), ncol=3);
for (i in 1:360) {
K = i*R;
...
}

      

and use the modified matrix for further calculations in the loop. However, the loop itself is nested inside the other two loops, making the script very slow. So my question is, how can I vectorize this very inner loop such that the result is instead a 3x3x360 3-D array A, where

A[,,i] = i*R;

      

for all am I from 1 to 360?

+3


source to share


1 answer


How about some basic multiplication and reshaping



set.seed(15) #for reproducibility
R <- matrix(rexp(9, rate=.1), ncol=3);
R
#           [,1]      [,2]      [,3]
# [1,]  2.042281  1.760375 2.9230182
# [2,] 19.466458  6.628580 0.1818078
# [3,]  2.544348 27.541514 4.1325714

dd <- array(sapply(1:360, `*`, R), dim=c(dim(R), 360))
dd[,,1]
#           [,1]      [,2]      [,3]
# [1,]  2.042281  1.760375 2.9230182
# [2,] 19.466458  6.628580 0.1818078
# [3,]  2.544348 27.541514 4.1325714
dd[,,2]
#           [,1]      [,2]      [,3]
# [1,]  4.084562  3.520749 5.8460364
# [2,] 38.932916 13.257161 0.3636157
# [3,]  5.088697 55.083027 8.2651427
dd[,,10]
#           [,1]      [,2]      [,3]
# [1,]  20.42281  17.60375 29.230182
# [2,] 194.66458  66.28580  1.818078
# [3,]  25.44348 275.41514 41.325714

      

+4


source







All Articles