Add 2D Matrix to 3D Matrix

I have a 2D matrix that I need to add to a 3D matrix, for example:

mx3d <- array(1:60, c(3,4,5))
mx2d <- array(letters[1:15], c(3,5))

      

Can we add this mx2d

to mx3d

to mx3d.new

become a 3x5x5

matrix? Would it be easier if I convert the matrix to a list? Thank!

To be clear, based on what we have in mx2d

and mx3d

, I want to have something like:

> mx3d.new
, , 1

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10  "a"
[2,]    2    5    8   11  "b"
[3,]    3    6    9   12  "c"

, , 2

     [,1] [,2] [,3] [,4] [,5]
[1,]   13   16   19   22  "d"
[2,]   14   17   20   23  "e"
[3,]   15   18   21   24  "f"

, , 3

     [,1] [,2] [,3] [,4] [,5]
[1,]   25   28   31   34  "g"
[2,]   26   29   32   35  "h"
[3,]   27   30   33   36  "i"

, , 4

     [,1] [,2] [,3] [,4] [,5]
[1,]   37   40   43   46  "j"
[2,]   38   41   44   47  "k"
[3,]   39   42   45   48  "l"

, , 5

     [,1] [,2] [,3] [,4] [,5]
[1,]   49   52   55   58  "m"
[2,]   50   53   56   59  "n"
[3,]   51   54   57   60  "o"

      

+3


source to share


2 answers


library(abind)
mx3d.new <- abind(mx3d, mx2d, along= 2)
for(i in 1:5) print(mx3d.new[,,i])

      

It works?



This gives me the following:

> for(i in 1:5) print(mx3d.new[,,i])

     [,1] [,2] [,3] [,4] [,5]

[1,] "1"  "4"  "7"  "10" "a" 

[2,] "2"  "5"  "8"  "11" "b" 

[3,] "3"  "6"  "9"  "12" "c" 

     [,1] [,2] [,3] [,4] [,5]

[1,] "13" "16" "19" "22" "d" 

[2,] "14" "17" "20" "23" "e" 

[3,] "15" "18" "21" "24" "f" 

     [,1] [,2] [,3] [,4] [,5]

[1,] "25" "28" "31" "34" "g" 

[2,] "26" "29" "32" "35" "h" 

[3,] "27" "30" "33" "36" "i" 

     [,1] [,2] [,3] [,4] [,5]

[1,] "37" "40" "43" "46" "j" 

[2,] "38" "41" "44" "47" "k" 

[3,] "39" "42" "45" "48" "l" 

     [,1] [,2] [,3] [,4] [,5]
[1,] "49" "52" "55" "58" "m" 

[2,] "50" "53" "56" "59" "n" 

[3,] "51" "54" "57" "60" "o"

      

+6


source


I'm not sure if I understand your question correctly, but does

mx3d.new <- array(letters[1:75],c(3,5,5))

      

will provide you with what you want? Or, if you want to repeat it,



mx3d.new <- array(letters[1:15],c(3,5,5))

      

Perhaps if you can give some context for the problem you want to solve, I can be of more help.

Cheers, Jim

+2


source







All Articles